commit 3c6e1aaeede670574a0a880a27bd1fd85269024b from: Omar Polo date: Wed Aug 16 10:16:18 2023 UTC fix control_accept handling of ENFILE/EMFILE Not sure how it worked with libevent before, but the reschedule is wrong. We need to schedule a timer to re-add the event on the listening fd. commit - 0a53bd62d11ed31ce71da1fc9993bc25a6c93755 commit + 3c6e1aaeede670574a0a880a27bd1fd85269024b blob - 55013fb5da5f02362fa64295f888aee9478c4913 blob + 80077410f3ede6a2089d42a3f7e3ce9687643fbf --- control.c +++ control.c @@ -101,6 +101,12 @@ control_init(char *path) } return (fd); +} + +static void +enable_accept(int fd, int ev, void *bula) +{ + ev_add(control_state.fd, POLLIN, control_accept, NULL); } int @@ -115,7 +121,7 @@ control_listen(int fd) return (-1); } - ev_add(control_state.fd, POLLIN, control_accept, NULL); + enable_accept(-1, 0, NULL); return (0); } @@ -138,7 +144,7 @@ control_accept(int listenfd, int event, void *bula) struct timeval evtpause = { 1, 0 }; ev_del(control_state.fd); - ev_timer(&evtpause, control_accept, NULL); + ev_timer(&evtpause, enable_accept, NULL); } else if (errno != EWOULDBLOCK && errno != EINTR && errno != ECONNABORTED) log_warn("%s: accept4", __func__);