Commit 5a510ed5 authored by Rusty Russell's avatar Rusty Russell

Revert "io: closing one side of a duplex connection closes both."

This reverts commit 490b6385.
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>

Conflicts:
	ccan/io/io.c
parent dbbefec6
...@@ -46,12 +46,6 @@ struct io_plan io_debug(struct io_plan plan) ...@@ -46,12 +46,6 @@ struct io_plan io_debug(struct io_plan plan)
current->plan = plan; current->plan = plan;
backend_plan_changed(current); 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. */ /* Call back into the loop immediately. */
io_loop_return = do_io_loop(&ready); io_loop_return = do_io_loop(&ready);
...@@ -460,14 +454,6 @@ void io_ready(struct io_conn *conn) ...@@ -460,14 +454,6 @@ void io_ready(struct io_conn *conn)
backend_plan_changed(conn); backend_plan_changed(conn);
} }
set_current(NULL); 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. */ /* Close the connection, we're done. */
......
...@@ -394,7 +394,7 @@ bool io_timeout_(struct io_conn *conn, struct timespec ts, ...@@ -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 * to have two connections for the same fd, and use one for read
* operations and one for write. * 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: * Example:
* static void setup_read_write(int fd, * static void setup_read_write(int fd,
......
...@@ -25,7 +25,7 @@ static void finish_ok(struct io_conn *conn, struct data *d) ...@@ -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) static struct io_plan write_done(struct io_conn *conn, struct data *d)
{ {
d->state++; d->state++;
return io_idle(); return io_close();
} }
static void init_conn(int fd, struct data *d) static void init_conn(int fd, struct data *d)
......
...@@ -28,16 +28,7 @@ static void finish_ok(struct io_conn *conn, struct data *d) ...@@ -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) static struct io_plan end(struct io_conn *conn, struct data *d)
{ {
d->state++; d->state++;
return io_close();
/* 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();
} }
static struct io_plan make_duplex(struct io_conn *conn, struct data *d) static struct io_plan make_duplex(struct io_conn *conn, struct data *d)
......
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