-/* It's OK to miss some, as long as we make progress. */
-static void finish_and_next(bool finished_only)
-{
- unsigned int i;
-
- for (i = 0; !io_loop_return && i < num_fds; i++) {
- struct io_conn *c, *duplex;
-
- if (!num_finished) {
- if (finished_only || num_next == 0)
- break;
- }
- if (fds[i]->listener)
- continue;
- c = (void *)fds[i];
- for (duplex = c->duplex; c; c = duplex, duplex = NULL) {
- if (c->plan.state == IO_FINISHED) {
- del_conn(c);
- free(c);
- i--;
- } else if (!finished_only && c->plan.state == IO_NEXT) {
- backend_set_state(c, c->plan.next(c, c->plan.next_arg));
- num_next--;
- }
- }
- }
+ io_new_conn(l->ctx, fd, l->init, l->arg);