diff options
Diffstat (limited to 'src/eloop.c')
| -rw-r--r-- | src/eloop.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/eloop.c b/src/eloop.c index 834af968..f1b90bef 100644 --- a/src/eloop.c +++ b/src/eloop.c @@ -940,9 +940,6 @@ eloop_clear(struct eloop *eloop, ...) if (eloop == NULL) return; - eloop->signals = NULL; - eloop->nsignals = 0; - va_start(va1, eloop); TAILQ_FOREACH_SAFE(e, &eloop->events, next, ne) { va_copy(va2, va1); @@ -960,12 +957,14 @@ eloop_clear(struct eloop *eloop, ...) free(e); } va_end(va1); - if (TAILQ_FIRST(&eloop->events) == NULL) { - free(eloop->fds); - eloop->fds = NULL; - eloop->nfds = 0; - } else - eloop->events_need_setup = true; + + /* Free the pollfd buffer and ensure it's re-created before + * the next run. This allows us to shrink it incase we use a lot less + * signals and fds to respond to after forking. */ + free(eloop->fds); + eloop->fds = NULL; + eloop->nfds = 0; + eloop->events_need_setup = true; while ((e = TAILQ_FIRST(&eloop->free_events))) { TAILQ_REMOVE(&eloop->free_events, e, next); |
