]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Now we have a fd lookup table, we can elimiate the need to store
authorRoy Marples <roy@marples.name>
Fri, 26 Feb 2016 21:22:30 +0000 (21:22 +0000)
committerRoy Marples <roy@marples.name>
Fri, 26 Feb 2016 21:22:30 +0000 (21:22 +0000)
a backpointer to the poll structure in the event.

eloop.c

diff --git a/eloop.c b/eloop.c
index bd8a12542ebdfe033d3fc7590a74a2180fc9b987..3c57f46f27517070709b64fbef773110705e00d0 100644 (file)
--- a/eloop.c
+++ b/eloop.c
@@ -143,9 +143,6 @@ struct eloop_event {
        void *read_cb_arg;
        void (*write_cb)(void *);
        void *write_cb_arg;
-#ifdef HAVE_POLL
-       struct pollfd *pollfd;
-#endif
 };
 
 struct eloop_timeout {
@@ -216,7 +213,6 @@ eloop_event_setup_fds(struct eloop *eloop)
                if (e->write_cb)
                        eloop->fds[i].events |= POLLOUT;
                eloop->fds[i].revents = 0;
-               e->pollfd = &eloop->fds[i];
                i++;
        }
 }
@@ -936,16 +932,22 @@ eloop_start(struct eloop *eloop, sigset_t *signals)
                }
 #elif defined(HAVE_POLL)
                if (n > 0) {
-                       TAILQ_FOREACH(e, &eloop->events, next) {
-                               if (e->pollfd->revents & POLLOUT &&
-                                   e->write_cb != NULL)
-                               {
-                                       e->write_cb(e->write_cb_arg);
-                                       break;
+                       size_t i;
+
+                       for (i = 0; i < eloop->events_len; i++) {
+                               if (eloop->fds[i].revents & POLLOUT) {
+                                       e = eloop->event_fds[eloop->fds[i].fd];
+                                       if (e->write_cb != NULL) {
+                                               e->write_cb(e->write_cb_arg);
+                                               break;
+                                       }
                                }
-                               if (e->pollfd->revents && e->read_cb != NULL) {
-                                       e->read_cb(e->read_cb_arg);
-                                       break;
+                               if (eloop->fds[i].revents) {
+                                       e = eloop->event_fds[eloop->fds[i].fd];
+                                       if (e->read_cb != NULL) {
+                                               e->read_cb(e->read_cb_arg);
+                                               break;
+                                       }
                                }
                        }
                }