# HG changeset patch # User jbe # Date 1429210091 -7200 # Node ID 891cdc4b43eb43c63db3c6acdc91beaf1a8e1abc # Parent 293e666a41e09005ff2da8706c925d6f2de254da Revised flushing behavior of write_nb(...) again diff -r 293e666a41e0 -r 891cdc4b43eb moonbridge_io.c --- a/moonbridge_io.c Thu Apr 16 04:24:21 2015 +0200 +++ b/moonbridge_io.c Thu Apr 16 20:48:11 2015 +0200 @@ -108,7 +108,7 @@ } } -static void moonbr_io_handle_set_nopush(lua_State *L, moonbr_io_handle_t *handle, int nopush) { +static inline void moonbr_io_handle_set_nopush(lua_State *L, moonbr_io_handle_t *handle, int nopush) { #if defined(TCP_NOPUSH) || defined(TCP_CORK) if ( !(handle->addrfam == AF_INET6 || handle->addrfam == AF_INET) || @@ -289,7 +289,6 @@ handle->writeleft += strlen; } if (flush) handle->flushedleft = handle->writeleft; - if (handle->flushedleft) moonbr_io_handle_set_nopush(L, handle, 0); while (handle->writeqout != handle->writeqin) { lua_rawgeti(L, -1, handle->writeqout); str = lua_tolstring(L, -1, &strlen); @@ -313,7 +312,7 @@ ); handle->writeqoff += MOONBR_IO_WRITEBUFLEN - handle->writebufin; while (handle->writebufout < MOONBR_IO_WRITEBUFLEN) { - if (!handle->flushedleft) moonbr_io_handle_set_nopush(L, handle, 1); + moonbr_io_handle_set_nopush(L, handle, 1); written = write( handle->fd, handle->writebuf + handle->writebufout, @@ -331,8 +330,14 @@ } else { handle->writebufout += written; handle->writeleft -= written; - if (written >= handle->flushedleft) handle->flushedleft = 0; - else handle->flushedleft -= written; + if (handle->flushedleft) { + if (written >= handle->flushedleft) { + handle->flushedleft = 0; + moonbr_io_handle_set_nopush(L, handle, 0); + } else { + handle->flushedleft -= written; + } + } } } handle->writebufin = 0; @@ -345,6 +350,7 @@ lua_rawseti(L, -2, handle->writeqout++); } while (handle->flushedleft) { + moonbr_io_handle_set_nopush(L, handle, 1); written = write( handle->fd, handle->writebuf + handle->writebufout, @@ -362,8 +368,14 @@ } else { handle->writebufout += written; handle->writeleft -= written; - if (written >= handle->flushedleft) handle->flushedleft = 0; - else handle->flushedleft -= written; + if (handle->flushedleft) { + if (written >= handle->flushedleft) { + handle->flushedleft = 0; + moonbr_io_handle_set_nopush(L, handle, 0); + } else { + handle->flushedleft -= written; + } + } } } if (handle->writebufout == handle->writebufin) {