From: Roy Marples Date: Fri, 25 Oct 2019 10:34:06 +0000 (+0100) Subject: eloop: Add eloop_clear function X-Git-Tag: v8.1.2~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=68b7565f94c549d7f4375bea30f2b52aa28b43b1;p=thirdparty%2Fdhcpcd.git eloop: Add eloop_clear function This will allow forking processes for future privsep work. --- diff --git a/src/eloop.c b/src/eloop.c index e8be9a34..66b87e9c 100644 --- a/src/eloop.c +++ b/src/eloop.c @@ -830,7 +830,8 @@ eloop_new(void) return eloop; } -void eloop_free(struct eloop *eloop) +void +eloop_clear(struct eloop *eloop) { struct eloop_event *e; struct eloop_timeout *t; @@ -839,6 +840,12 @@ void eloop_free(struct eloop *eloop) return; free(eloop->event_fds); + eloop->event_fds = NULL; + eloop->events_len = 0; + eloop->events_maxfd = -1; + eloop->signals = NULL; + eloop->signals_len = 0; + while ((e = TAILQ_FIRST(&eloop->events))) { TAILQ_REMOVE(&eloop->events, e, next); free(e); @@ -855,11 +862,22 @@ void eloop_free(struct eloop *eloop) TAILQ_REMOVE(&eloop->free_timeouts, t, next); free(t); } + +#if defined(HAVE_POLL) + free(eloop->fds); + eloop->fds = NULL; + eloop->fds_len = 0; +#endif +} + +void +eloop_free(struct eloop *eloop) +{ + #if defined(HAVE_KQUEUE) || defined(HAVE_EPOLL) close(eloop->poll_fd); -#elif defined(HAVE_POLL) - free(eloop->fds); #endif + eloop_clear(eloop); free(eloop); } diff --git a/src/eloop.h b/src/eloop.h index a98d57ed..18cd06d7 100644 --- a/src/eloop.h +++ b/src/eloop.h @@ -105,6 +105,7 @@ int eloop_signal_mask(struct eloop *, sigset_t *oldset); struct eloop * eloop_new(void); int eloop_requeue(struct eloop *); +void eloop_clear(struct eloop *); void eloop_free(struct eloop *); void eloop_exit(struct eloop *, int); int eloop_start(struct eloop *, sigset_t *);