Commit 8d94c52a authored by Rusty Russell's avatar Rusty Russell

io: don't do wakeup immediately.

ccan/io users don't expect to deal with callbacks inside each other; we should
just mark woken connections as if they were io_always.
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 31df8231
...@@ -88,6 +88,6 @@ void backend_del_conn(struct io_conn *conn); ...@@ -88,6 +88,6 @@ void backend_del_conn(struct io_conn *conn);
void io_ready(struct io_conn *conn, int pollflags); void io_ready(struct io_conn *conn, int pollflags);
void io_do_always(struct io_conn *conn); void io_do_always(struct io_conn *conn);
void io_do_wakeup(struct io_conn *conn, struct io_plan *plan); void io_do_wakeup(struct io_conn *conn, enum io_direction dir);
void *do_io_loop(struct io_conn **ready); void *do_io_loop(struct io_conn **ready);
#endif /* CCAN_IO_BACKEND_H */ #endif /* CCAN_IO_BACKEND_H */
...@@ -384,10 +384,13 @@ void io_do_always(struct io_conn *conn) ...@@ -384,10 +384,13 @@ void io_do_always(struct io_conn *conn)
next_plan(conn, &conn->plan[IO_OUT]); next_plan(conn, &conn->plan[IO_OUT]);
} }
void io_do_wakeup(struct io_conn *conn, struct io_plan *plan) void io_do_wakeup(struct io_conn *conn, enum io_direction dir)
{ {
struct io_plan *plan = &conn->plan[dir];
assert(plan->status == IO_WAITING); assert(plan->status == IO_WAITING);
next_plan(conn, plan);
set_always(conn, dir, plan->next, plan->next_arg);
} }
/* Close the connection, we're done. */ /* Close the connection, we're done. */
......
...@@ -158,11 +158,11 @@ void backend_wake(const void *wait) ...@@ -158,11 +158,11 @@ void backend_wake(const void *wait)
c = (void *)fds[i]; c = (void *)fds[i];
if (c->plan[IO_IN].status == IO_WAITING if (c->plan[IO_IN].status == IO_WAITING
&& c->plan[IO_IN].arg.u1.const_vp == wait) && c->plan[IO_IN].arg.u1.const_vp == wait)
io_do_wakeup(c, &c->plan[IO_IN]); io_do_wakeup(c, IO_IN);
if (c->plan[IO_OUT].status == IO_WAITING if (c->plan[IO_OUT].status == IO_WAITING
&& c->plan[IO_OUT].arg.u1.const_vp == wait) && c->plan[IO_OUT].arg.u1.const_vp == wait)
io_do_wakeup(c, &c->plan[IO_OUT]); io_do_wakeup(c, IO_OUT);
} }
} }
......
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