X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=lib%2Fwaiter%2Fwaiter.c;h=d684348f4fc9566be5bc6ab9023793b169e5580f;hp=b36c1afdac35450139ad318c9c7f7e1c8462f699;hb=a83a614d94b09d063d56bf28be6f9dd0d0e22854;hpb=f6d419d22a4c69af185201b30f78b5a88da51219 diff --git a/lib/waiter/waiter.c b/lib/waiter/waiter.c index b36c1af..d684348 100644 --- a/lib/waiter/waiter.c +++ b/lib/waiter/waiter.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -57,16 +58,11 @@ struct waitset *waitset_create(void *ctx) return set; } -void waitset_destroy(struct waitset *set) -{ - talloc_free(set); -} - 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 +134,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; @@ -227,11 +223,13 @@ int waiter_poll(struct waitset *set) timeout_ms = -1; } - rc = poll(set->pollfds, set->n_io_waiters, timeout_ms); - if (rc < 0) + if (rc < 0) { + if (errno == EINTR) + rc = 0; goto out; + } for (i = 0; i < set->n_io_waiters; i++) { struct waiter *waiter = set->io_waiters[i];