- if (set->n_waiters != set->n_pollfds) {
- set->pollfds = talloc_realloc(set, set->pollfds,
- struct pollfd, set->n_waiters);
- set->n_pollfds = set->n_waiters;
- }
+ /* If the waiters have been updated, we need to update our
+ * consistent copy */
+ if (set->waiters_changed) {
+
+ /* We need to reallocate if the count has changes */
+ if (set->cur_n_waiters != set->n_waiters) {
+ set->cur_waiters = talloc_realloc(set, set->cur_waiters,
+ struct waiter *, set->n_waiters);
+ set->pollfds = talloc_realloc(set, set->pollfds,
+ struct pollfd, set->n_waiters);
+ set->cur_n_waiters = set->n_waiters;
+ }
+
+ /* Populate cur_waiters and pollfds from ->waiters data */
+ for (i = 0; i < set->n_waiters; i++) {
+ set->pollfds[i].fd = set->waiters[i]->fd;
+ set->pollfds[i].events = set->waiters[i]->events;
+ set->pollfds[i].revents = 0;
+ set->cur_waiters[i] = set->waiters[i];
+ }