Mercurial > hg > dhcpcd
changeset 5324:e5cbedfa3dd9 draft
eloop: Don't remove existing callbacks when adding events
While here, add some debug when dealing with many sockets.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Mon, 08 Jun 2020 21:41:42 +0100 |
| parents | 742ab5ed32b8 |
| children | 896eb853623a |
| files | src/eloop.c |
| diffstat | 1 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eloop.c Sun Jun 07 23:39:46 2020 +0100 +++ b/src/eloop.c Mon Jun 08 21:41:42 2020 +0100 @@ -88,6 +88,10 @@ #endif #endif +#ifdef ELOOP_DEBUG +#include <stdio.h> +#endif + /* * time_t is a signed integer of an unspecified size. * To adjust for time_t wrapping, we need to work the maximum signed @@ -277,6 +281,10 @@ pfd = eloop->fds; TAILQ_FOREACH(e, &eloop->events, next) { +#ifdef ELOOP_DEBUG + fprintf(stderr, "%s(%d) fd=%d, rcb=%p, wcb=%p\n", + __func__, getpid(), e->fd, e->read_cb, e->write_cb); +#endif e->pollfd = pfd; pfd->fd = e->fd; pfd->events = 0; @@ -332,10 +340,14 @@ eloop->nevents++; } - e->read_cb = read_cb; - e->read_cb_arg = read_cb_arg; - e->write_cb = write_cb; - e->write_cb_arg = write_cb_arg; + if (read_cb) { + e->read_cb = read_cb; + e->read_cb_arg = read_cb_arg; + } + if (write_cb) { + e->write_cb = write_cb; + e->write_cb_arg = write_cb_arg; + } eloop_event_setup_fds(eloop); return 0; @@ -374,8 +386,6 @@ } if (write_only) { - if (e->write_cb == NULL) - return 0; if (e->read_cb == NULL) goto remove; e->write_cb = NULL;
