# HG changeset patch # User Olaf Wintermann # Date 1606998326 -3600 # Node ID 783467806e2de3eac1f1e1299dba2b9e126d86de # Parent 59f99038a576c005de2d5299fc17c745025e5934 fix kqueue event deletion diff -r 59f99038a576 -r 783467806e2d src/server/daemon/event_bsd.c --- a/src/server/daemon/event_bsd.c Thu Dec 03 12:38:46 2020 +0100 +++ b/src/server/daemon/event_bsd.c Thu Dec 03 13:25:26 2020 +0100 @@ -74,7 +74,6 @@ // wait for events int nev = kevent(ev->kqueue, changes, numchanges, events, 64, &timeout); if(nev == -1) { - // TODO: check for error log_ereport(LOG_FAILURE, "kevent: %s", strerror(errno)); continue; } @@ -83,7 +82,14 @@ for(int i=0;ievents; int e_fd = events[i].ident; if((e & EVENT_POLLIN) != (saved_ev & EVENT_POLLIN)) { - int f = (e & EVENT_POLLIN) == EVENT_POLLIN ? EV_ADD : EV_DELETE; - EV_SET(&changes[numchanges++], e_fd, EVFILT_READ, f, 0, 0, event); + if((e & EVENT_POLLIN) == EVENT_POLLIN) { + // add + EV_SET(&changes[numchanges++], e_fd, EVFILT_READ, EV_ADD, 0, 0, event); + } else { + // delete + EV_SET(&changes[numchanges++], e_fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); + } } if((e & EVENT_POLLOUT) != (saved_ev & EVENT_POLLOUT)) { - int f = (e & EVENT_POLLOUT) == EVENT_POLLOUT ? EV_ADD : EV_DELETE; - EV_SET(&changes[numchanges++], e_fd, EVFILT_WRITE, f, 0, 0, event); + if((e & EVENT_POLLOUT) == EVENT_POLLOUT) { + // add + EV_SET(&changes[numchanges++], e_fd, EVFILT_WRITE, EV_ADD, 0, 0, event); + } else { + // delete + EV_SET(&changes[numchanges++], e_fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL); + } } } } @@ -117,17 +133,6 @@ } } -int ev_convert2sys_events(int events) { - int e = 0; - if((events & EVENT_POLLIN) == EVENT_POLLIN) { - e |= EVFILT_READ; - } - if((events & EVENT_POLLOUT) == EVENT_POLLOUT) { - e |= EVFILT_WRITE; - } - return e; -} - int ev_pollin(EventHandler *h, int fd, Event *event) { event->events = EVENT_POLLIN; struct kevent kev;