X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fio%2Ftest%2Frun-10-many.c;h=53e971d0e284ef0775e520114230fa25e89746f4;hp=95a716e2263d26bc65e91d82f818d6a29c276509;hb=f7ab2c65d40839a327e50876dc2708ab7b11aa52;hpb=733b09fa8b6083949ff62795e54851aa282d510c diff --git a/ccan/io/test/run-10-many.c b/ccan/io/test/run-10-many.c index 95a716e2..53e971d0 100644 --- a/ccan/io/test/run-10-many.c +++ b/ccan/io/test/run-10-many.c @@ -15,56 +15,44 @@ struct buffer { char buf[32]; }; -static struct io_plan poke_writer(struct io_conn *conn, struct buffer *buf); static struct io_plan poke_reader(struct io_conn *conn, struct buffer *buf); +static struct io_plan poke_writer(struct io_conn *conn, struct buffer *buf); -static struct io_plan plan_read(struct io_conn *conn, struct buffer *buf) +static struct io_plan read_buf(struct io_conn *conn, struct buffer *buf) { - assert(conn == buf->reader); - return io_read(&buf->buf, sizeof(buf->buf), poke_writer, buf); } -static struct io_plan plan_write(struct io_conn *conn, struct buffer *buf) -{ - assert(conn == buf->writer); - - return io_write(&buf->buf, sizeof(buf->buf), poke_reader, buf); -} - static struct io_plan poke_writer(struct io_conn *conn, struct buffer *buf) { assert(conn == buf->reader); if (buf->iters == NUM_ITERS) - return io_close(conn, NULL); + return io_close(); /* You write. */ - io_wake(buf->writer, plan_write, buf); + io_wake(&buf->writer); /* I'll wait until you wake me. */ - return io_idle(); + return io_wait(&buf->reader, read_buf, buf); +} + +static struct io_plan write_buf(struct io_conn *conn, struct buffer *buf) +{ + return io_write(&buf->buf, sizeof(buf->buf), poke_reader, buf); } static struct io_plan poke_reader(struct io_conn *conn, struct buffer *buf) { assert(conn == buf->writer); /* You read. */ - io_wake(buf->reader, plan_read, buf); + io_wake(&buf->reader); if (++buf->iters == NUM_ITERS) - return io_close(conn, NULL); + return io_close(); /* I'll wait until you tell me to write. */ - return io_idle(); -} - -static struct io_plan reader(struct io_conn *conn, struct buffer *buf) -{ - assert(conn == buf->reader); - - /* Wait for writer to tell us to read. */ - return io_idle(); + return io_wait(&buf->writer, write_buf, buf); } static struct buffer buf[NUM]; @@ -86,10 +74,13 @@ int main(void) memset(buf[i].buf, i, sizeof(buf[i].buf)); sprintf(buf[i].buf, "%i-%i", i, i); - buf[i].reader = io_new_conn(last_read, reader, NULL, &buf[i]); + /* Wait for writer to tell us to read. */ + buf[i].reader = io_new_conn(last_read, + io_wait(&buf[i].reader, read_buf, + &buf[i])); if (!buf[i].reader) break; - buf[i].writer = io_new_conn(fds[1], plan_write, NULL, &buf[i]); + buf[i].writer = io_new_conn(fds[1], write_buf(NULL, &buf[i])); if (!buf[i].writer) break; last_read = fds[0]; @@ -100,9 +91,10 @@ int main(void) /* Last one completes the cirle. */ i = 0; sprintf(buf[i].buf, "%i-%i", i, i); - buf[i].reader = io_new_conn(last_read, reader, NULL, &buf[i]); + buf[i].reader = io_new_conn(last_read, + io_wait(&buf[i].reader, read_buf, &buf[i])); ok1(buf[i].reader); - buf[i].writer = io_new_conn(last_write, plan_write, NULL, &buf[i]); + buf[i].writer = io_new_conn(last_write, write_buf(NULL, &buf[i])); ok1(buf[i].writer); /* They should eventually exit */