]> git.ozlabs.org Git - petitboot/blobdiff - lib/waiter/waiter.c
lib/waiter: talloc waiters from waitset context
[petitboot] / lib / waiter / waiter.c
index 1d9a7d8945e1cd992ebf458bcb797a36b016a9e0..833f63b856a035d7a49adb724bacceeb2553521d 100644 (file)
@@ -66,7 +66,7 @@ static struct waiter *waiter_new(struct waitset *set)
 {
        struct waiter **waiters, *waiter;
 
-       waiter = talloc(set->waiters, struct waiter);
+       waiter = talloc(set, struct waiter);
        if (!waiter)
                return NULL;
 
@@ -138,7 +138,7 @@ void waiter_remove(struct waiter *waiter)
        memmove(&set->waiters[i], &set->waiters[i+1],
                (set->n_waiters - i) * sizeof(set->waiters[0]));
 
-       set->waiters = talloc_realloc(set->waiters, set->waiters,
+       set->waiters = talloc_realloc(set, set->waiters,
                        struct waiter *, set->n_waiters);
        set->waiters_changed = true;
 
@@ -176,34 +176,32 @@ static void update_waiters(struct waitset *set)
                set->n_time_waiters = n_time;
        }
 
-       /* IO waiters: copy to io_waiters, populate pollfds */
-       for (i = i_io = 0; i < set->n_waiters; i++) {
-               struct waiter *waiter = set->waiters[i];
-
-               if (waiter->type != WAITER_IO)
-                       continue;
-
-               set->pollfds[i_io].fd = waiter->io.fd;
-               set->pollfds[i_io].events = waiter->io.events;
-               set->io_waiters[i_io] = waiter;
-               i_io++;
-       }
+       i_io = 0;
+       i_time = 0;
 
-       /* time waiters: copy to time_waiters, calculate next expiry */
        timerclear(&set->next_timeout);
-       for (i = i_time = 0; i < set->n_waiters; i++) {
-               struct waiter *waiter = set->waiters[i];
-
-               if (waiter->type != WAITER_TIME)
-                       continue;
 
-               if (!timerisset(&set->next_timeout) ||
-                               timercmp(&waiter->timeout,
-                                       &set->next_timeout, <))
-                       set->next_timeout = waiter->timeout;
+       for (i = 0; i < set->n_waiters; i++) {
+               struct waiter *waiter = set->waiters[i];
 
-               set->time_waiters[i_time] = waiter;
-               i_time++;
+               /* IO waiters: copy to io_waiters, populate pollfds */
+               if (waiter->type == WAITER_IO) {
+                       set->pollfds[i_io].fd = waiter->io.fd;
+                       set->pollfds[i_io].events = waiter->io.events;
+                       set->io_waiters[i_io] = waiter;
+                       i_io++;
+               }
+
+               /* time waiters: copy to time_waiters, calculate next expiry */
+               if (waiter->type == WAITER_TIME) {
+                       if (!timerisset(&set->next_timeout) ||
+                                       timercmp(&waiter->timeout,
+                                               &set->next_timeout, <))
+                               set->next_timeout = waiter->timeout;
+
+                       set->time_waiters[i_time] = waiter;
+                       i_time++;
+               }
        }
 }