defeat POLLOUT if socket in shutdown wait

After andrejs.hanins@ubnt.com

Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
Andy Green 2016-02-24 21:32:31 +08:00
parent 3daefb876a
commit ee2f1ea667
3 changed files with 15 additions and 1 deletions

View file

@ -6,6 +6,14 @@ Fixes
1) libuv one-per-session valgrind leak fixed
2) MINOR An error about hdr struct in _lws_ws_related is corrected, it's not
known to affect anything added until after it was fixed
3) MINOR During the close shutdown wait state introduced at v1.7, if something
requests callback on writeable for the socket it will busywait until the
socket closes
Changes
-------

View file

@ -299,8 +299,9 @@ just_kill_connection:
n = shutdown(wsi->sock, SHUT_WR);
if (n)
lwsl_debug("closing: shutdown ret %d\n", LWS_ERRNO);
wsi->state = LWSS_SHUTDOWN;
lws_change_pollfd(wsi, LWS_POLLOUT, LWS_POLLIN);
wsi->state = LWSS_SHUTDOWN;
lws_set_timeout(wsi, PENDING_TIMEOUT_SHUTDOWN_FLUSH,
context->timeout_secs);
return;

View file

@ -277,7 +277,12 @@ lws_callback_on_writable(struct lws *wsi)
#ifdef LWS_USE_HTTP2
struct lws *network_wsi, *wsi2;
int already;
#endif
if (wsi->state == LWSS_SHUTDOWN)
return 0;
#ifdef LWS_USE_HTTP2
lwsl_info("%s: %p\n", __func__, wsi);
if (wsi->mode != LWSCM_HTTP2_SERVING)