diff options
| author | Roy Marples <roy@marples.name> | 2021-01-29 11:13:43 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2021-01-29 11:13:43 +0000 |
| commit | a9cb061e3832a381b02bd9927daf5ef7a2adce66 (patch) | |
| tree | 142794e94f5d81f60813d4cda8f2c4b29d73c806 | |
| parent | 14d3b511ee71c1fb39e383949384a7a43fac0263 (diff) | |
| download | dhcpcd-a9cb061e3832a381b02bd9927daf5ef7a2adce66.tar.xz | |
eloop: Always free the pollfd buffer when clearing events
And set the flag to re-create it before the next run.
This allows us to always ensure it's small if the prior run
used more signals and fds.
| -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); |
