#include <stdbool.h>
#include <string.h>
#include <assert.h>
+#include <errno.h>
#include <sys/time.h>
#include <talloc/talloc.h>
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;
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;
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];