X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fio%2Fio.c;h=b74520444353761451529af0d0467522293f2686;hb=490b63852f281f0d72eb6f6dfa5e0dce36bcbe0d;hp=f45589c0fac71888b1be312debcb3ec04597b0bb;hpb=96a1ebd3354ef6250e94b509b4e0c0f1ea7e67bb;p=ccan diff --git a/ccan/io/io.c b/ccan/io/io.c index f45589c0..b7452044 100644 --- a/ccan/io/io.c +++ b/ccan/io/io.c @@ -46,6 +46,12 @@ 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); @@ -441,6 +447,14 @@ void io_ready(struct io_conn *conn) backend_plan_changed(conn); } set_current(NULL); + + /* If it closed, close duplex. */ + if (!conn->plan.next && conn->duplex) { + set_current(conn->duplex); + conn->duplex->plan = io_close(); + backend_plan_changed(conn->duplex); + set_current(NULL); + } } /* Close the connection, we're done. */