Browse Source

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

This reverts commit 490b63852f281f0d72eb6f6dfa5e0dce36bcbe0d.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

Conflicts:
	ccan/io/io.c
Rusty Russell 12 years ago
parent
commit
5a510ed569
4 changed files with 3 additions and 26 deletions
  1. 0 14
      ccan/io/io.c
  2. 1 1
      ccan/io/io.h
  3. 1 1
      ccan/io/test/run-12-bidir.c
  4. 1 10
      ccan/io/test/run-14-duplex-both-read.c

+ 0 - 14
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. */

+ 1 - 1
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,

+ 1 - 1
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)

+ 1 - 10
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)