From: Ian Jackson Date: Sat, 8 May 2010 13:49:05 +0000 (+0100) Subject: Merge branch 'running2' of login.chiark.greenend.org.uk:public-git/inn-innduct X-Git-Tag: innduct-0.1~37 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=702491b06f296a1258434a54bd70f150ba77a128;hp=f98819843175b40aad7c083b05d60d3932fadaf5;p=innduct.git Merge branch 'running2' of login.chiark.greenend.org.uk:public-git/inn-innduct --- diff --git a/backends/innduct.c b/backends/innduct.c index 8104fee..29fe5c1 100644 --- a/backends/innduct.c +++ b/backends/innduct.c @@ -511,6 +511,7 @@ struct Conn { ISNODE(Conn); int fd; /* may be 0, meaning closed (during construction/destruction) */ oop_read *rd; /* likewise */ + int oopwriting; /* since on_fd is not idempotent */ int max_queue, stream; const char *quitting; int since_activity; /* periods */ @@ -1547,12 +1548,16 @@ static void conn_maybe_write(Conn *conn) { conn_make_some_xmits(conn); if (!conn->xmitu) { loop->cancel_fd(loop, conn->fd, OOP_WRITE); + conn->oopwriting= 0; return; } void *rp= conn_write_some_xmits(conn); if (rp==OOP_CONTINUE) { - loop->on_fd(loop, conn->fd, OOP_WRITE, conn_writeable, conn); + if (!conn->oopwriting) { + loop->on_fd(loop, conn->fd, OOP_WRITE, conn_writeable, conn); + conn->oopwriting= 1; + } return; } else if (rp==OOP_HALT) { return;