From 5a510ed5696255910fd42adb47d7c1ffa728a116 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 14 Nov 2013 18:13:31 +1030 Subject: [PATCH] Revert "io: closing one side of a duplex connection closes both." This reverts commit 490b63852f281f0d72eb6f6dfa5e0dce36bcbe0d. Signed-off-by: Rusty Russell Conflicts: ccan/io/io.c --- ccan/io/io.c | 14 -------------- ccan/io/io.h | 2 +- ccan/io/test/run-12-bidir.c | 2 +- ccan/io/test/run-14-duplex-both-read.c | 11 +---------- 4 files changed, 3 insertions(+), 26 deletions(-) diff --git a/ccan/io/io.c b/ccan/io/io.c index 54ba7da5..a58b3f01 100644 --- a/ccan/io/io.c +++ b/ccan/io/io.c @@ -46,12 +46,6 @@ struct io_plan io_debug(struct io_plan plan) current->plan = plan; backend_plan_changed(current); - /* If it closed, close duplex. */ - if (!current->plan.next && current->duplex) { - current->duplex->plan = io_close_(); - backend_plan_changed(current->duplex); - } - /* Call back into the loop immediately. */ io_loop_return = do_io_loop(&ready); @@ -460,14 +454,6 @@ void io_ready(struct io_conn *conn) backend_plan_changed(conn); } set_current(NULL); - - /* If it closed, close duplex if not already */ - if (!conn->plan.next && conn->duplex && conn->duplex->plan.next) { - set_current(conn->duplex); - conn->duplex->plan = io_close(); - backend_plan_changed(conn->duplex); - set_current(NULL); - } } /* Close the connection, we're done. */ diff --git a/ccan/io/io.h b/ccan/io/io.h index df0764bd..4468cee3 100644 --- a/ccan/io/io.h +++ b/ccan/io/io.h @@ -394,7 +394,7 @@ bool io_timeout_(struct io_conn *conn, struct timespec ts, * to have two connections for the same fd, and use one for read * operations and one for write. * - * Returning io_close() on one will close both fds! + * You must io_close() both of them to close the fd. * * Example: * static void setup_read_write(int fd, diff --git a/ccan/io/test/run-12-bidir.c b/ccan/io/test/run-12-bidir.c index f7a0ecab..1ab0a218 100644 --- a/ccan/io/test/run-12-bidir.c +++ b/ccan/io/test/run-12-bidir.c @@ -25,7 +25,7 @@ static void finish_ok(struct io_conn *conn, struct data *d) static struct io_plan write_done(struct io_conn *conn, struct data *d) { d->state++; - return io_idle(); + return io_close(); } static void init_conn(int fd, struct data *d) diff --git a/ccan/io/test/run-14-duplex-both-read.c b/ccan/io/test/run-14-duplex-both-read.c index 70bdec0a..d1868e2e 100644 --- a/ccan/io/test/run-14-duplex-both-read.c +++ b/ccan/io/test/run-14-duplex-both-read.c @@ -28,16 +28,7 @@ static void finish_ok(struct io_conn *conn, struct data *d) static struct io_plan end(struct io_conn *conn, struct data *d) { d->state++; - - /* last one out closes. */ - if (conn == d->c1 && io_is_idle(d->c2)) - return io_close(); - - /* last one out closes. */ - if (conn == d->c2 && io_is_idle(d->c1)) - return io_close(); - - return io_idle(); + return io_close(); } static struct io_plan make_duplex(struct io_conn *conn, struct data *d) -- 2.39.2