]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
eloop: Add eloop_clear function
authorRoy Marples <roy@marples.name>
Fri, 25 Oct 2019 10:34:06 +0000 (11:34 +0100)
committerRoy Marples <roy@marples.name>
Fri, 25 Oct 2019 10:34:06 +0000 (11:34 +0100)
This will allow forking processes for future privsep work.

src/eloop.c
src/eloop.h

index e8be9a34ac87eb2162a418b985c68f998a484562..66b87e9c42c89755a6a998f00316eacd158c76a4 100644 (file)
@@ -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);
 }
 
index a98d57ed7ec1ddfa065e75d6f93abec180791d53..18cd06d7d60b04c49b21631871a4f81216c35f57 100644 (file)
@@ -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 *);