X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fio%2Ftest%2Frun-10-many.c;h=fc48ecb56cf7d75ba3f65750ed4c08849db53b6e;hp=da59a3cc30ef0f6ebb734a24d755515f636b4971;hb=6109a0a6140acbbfe5e998f7d7ea1215f035cb90;hpb=641b511049e5c03d45ada0c3fd829691b173e5d1 diff --git a/ccan/io/test/run-10-many.c b/ccan/io/test/run-10-many.c index da59a3cc..fc48ecb5 100644 --- a/ccan/io/test/run-10-many.c +++ b/ccan/io/test/run-10-many.c @@ -15,35 +15,49 @@ struct buffer { char buf[32]; }; -static struct io_plan poke_reader(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 poke_writer(struct io_conn *conn, struct buffer *buf) +static struct io_plan *read_buf(struct io_conn *conn, struct buffer *buf) +{ + return io_read(conn, &buf->buf, sizeof(buf->buf), poke_writer, 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(); + return io_close(conn); /* You write. */ - io_wake(buf->writer, - io_write(&buf->buf, sizeof(buf->buf), poke_reader, buf)); + io_wake(&buf->writer); /* I'll wait until you wake me. */ - return io_idle(); + return io_wait(conn, &buf->reader, read_buf, buf); } -static struct io_plan poke_reader(struct io_conn *conn, struct buffer *buf) +static struct io_plan *write_buf(struct io_conn *conn, struct buffer *buf) +{ + return io_write(conn, &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, - io_read(&buf->buf, sizeof(buf->buf), poke_writer, buf)); + io_wake(&buf->reader); if (++buf->iters == NUM_ITERS) - return io_close(); + return io_close(conn); /* I'll wait until you tell me to write. */ - return io_idle(); + return io_wait(conn, &buf->writer, write_buf, buf); +} + +static struct io_plan *setup_reader(struct io_conn *conn, struct buffer *buf) +{ + return io_wait(conn, &buf->reader, read_buf, buf); } static struct buffer buf[NUM]; @@ -66,13 +80,11 @@ int main(void) sprintf(buf[i].buf, "%i-%i", i, i); /* Wait for writer to tell us to read. */ - buf[i].reader = io_new_conn(last_read, io_idle()); + buf[i].reader = io_new_conn(NULL, last_read, + setup_reader, &buf[i]); if (!buf[i].reader) break; - buf[i].writer = io_new_conn(fds[1], - io_write(&buf[i].buf, - sizeof(buf[i].buf), - poke_reader, &buf[i])); + buf[i].writer = io_new_conn(NULL, fds[1], write_buf, &buf[i]); if (!buf[i].writer) break; last_read = fds[0]; @@ -83,11 +95,9 @@ 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, io_idle()); + buf[i].reader = io_new_conn(NULL, last_read, setup_reader, &buf[i]); ok1(buf[i].reader); - buf[i].writer = io_new_conn(last_write, - io_write(&buf[i].buf, sizeof(buf[i].buf), - poke_reader, &buf[i])); + buf[i].writer = io_new_conn(NULL, last_write, write_buf, &buf[i]); ok1(buf[i].writer); /* They should eventually exit */