Commit f6f11f6b authored by Rusty Russell's avatar Rusty Russell

ccan/io: remove IO_NEXT state.

It was only used for initial connections which hadn't started I/O.  Now
they are initialized with an io_plan, it can be eliminated.
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 57d9d1be
...@@ -36,7 +36,6 @@ enum io_result { ...@@ -36,7 +36,6 @@ enum io_result {
enum io_state { enum io_state {
IO_IO, IO_IO,
IO_NEXT, /* eg starting, woken from idle, return from io_break. */
IO_IDLE, IO_IDLE,
IO_FINISHED IO_FINISHED
}; };
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <limits.h> #include <limits.h>
static size_t num_fds = 0, max_fds = 0, num_next = 0, num_finished = 0, num_waiting = 0; static size_t num_fds = 0, max_fds = 0, num_finished = 0, num_waiting = 0;
static struct pollfd *pollfds = NULL; static struct pollfd *pollfds = NULL;
static struct fd **fds = NULL; static struct fd **fds = NULL;
static struct timers timeouts; static struct timers timeouts;
...@@ -79,9 +79,7 @@ bool add_listener(struct io_listener *l) ...@@ -79,9 +79,7 @@ bool add_listener(struct io_listener *l)
static void adjust_counts(enum io_state state) static void adjust_counts(enum io_state state)
{ {
if (state == IO_NEXT) if (state == IO_FINISHED)
num_next++;
else if (state == IO_FINISHED)
num_finished++; num_finished++;
} }
...@@ -122,6 +120,7 @@ bool add_duplex(struct io_conn *c) ...@@ -122,6 +120,7 @@ bool add_duplex(struct io_conn *c)
static void del_conn(struct io_conn *conn) static void del_conn(struct io_conn *conn)
{ {
assert(conn->plan.state == IO_FINISHED);
if (conn->finish) if (conn->finish)
conn->finish(conn, conn->finish_arg); conn->finish(conn, conn->finish_arg);
if (timeout_active(conn)) if (timeout_active(conn))
...@@ -133,10 +132,7 @@ static void del_conn(struct io_conn *conn) ...@@ -133,10 +132,7 @@ static void del_conn(struct io_conn *conn)
conn->duplex->duplex = NULL; conn->duplex->duplex = NULL;
} else } else
del_fd(&conn->fd); del_fd(&conn->fd);
if (conn->plan.state == IO_FINISHED)
num_finished--; num_finished--;
else if (conn->plan.state == IO_NEXT)
num_next--;
} }
void del_listener(struct io_listener *l) void del_listener(struct io_listener *l)
...@@ -166,17 +162,16 @@ static void accept_conn(struct io_listener *l) ...@@ -166,17 +162,16 @@ static void accept_conn(struct io_listener *l)
} }
/* It's OK to miss some, as long as we make progress. */ /* It's OK to miss some, as long as we make progress. */
static void finish_and_next(bool finished_only) static void finish_conns(void)
{ {
unsigned int i; unsigned int i;
for (i = 0; !io_loop_return && i < num_fds; i++) { for (i = 0; !io_loop_return && i < num_fds; i++) {
struct io_conn *c, *duplex; struct io_conn *c, *duplex;
if (!num_finished) { if (!num_finished)
if (finished_only || num_next == 0)
break; break;
}
if (fds[i]->listener) if (fds[i]->listener)
continue; continue;
c = (void *)fds[i]; c = (void *)fds[i];
...@@ -185,9 +180,6 @@ static void finish_and_next(bool finished_only) ...@@ -185,9 +180,6 @@ static void finish_and_next(bool finished_only)
del_conn(c); del_conn(c);
free(c); free(c);
i--; i--;
} else if (!finished_only && c->plan.state == IO_NEXT) {
backend_set_state(c, c->plan.next(c, c->plan.next_arg));
num_next--;
} }
} }
} }
...@@ -247,8 +239,8 @@ void *io_loop(void) ...@@ -247,8 +239,8 @@ void *io_loop(void)
} }
} }
if (num_finished || num_next) { if (num_finished) {
finish_and_next(false); finish_conns();
/* Could have started/finished more. */ /* Could have started/finished more. */
continue; continue;
} }
...@@ -299,7 +291,7 @@ void *io_loop(void) ...@@ -299,7 +291,7 @@ void *io_loop(void)
} }
while (num_finished) while (num_finished)
finish_and_next(true); finish_conns();
ret = io_loop_return; ret = io_loop_return;
io_loop_return = NULL; io_loop_return = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment