diff --git a/lib/output.c b/lib/output.c
index b2359549fa17887e9f574e9d0a0a3e7409638fde..28e15a6d415523552ce94bd85b29d2d3a2d7901d 100644
--- a/lib/output.c
+++ b/lib/output.c
@@ -153,9 +153,10 @@ handle_truncated_send:
lwsl_info("***** %x partial send completed\n", wsi);
/* done with it, but don't free it */
n = real_len;
- if (wsi->state == WSI_STATE_FLUSHING_STORED_SEND_BEFORE_CLOSE)
+ if (wsi->state == WSI_STATE_FLUSHING_STORED_SEND_BEFORE_CLOSE) {
lwsl_info("***** %x signalling to close now\n", wsi);
return -1; /* retry closing now */
+ }
}
/* always callback on writeable */
libwebsocket_callback_on_writable(
diff --git a/lib/service.c b/lib/service.c
index 85b6753d36439520f2000c676ad943da7f83833b..9aa743e5c51cdd41614f7055f9b786f757f2dd63 100644
--- a/lib/service.c
+++ b/lib/service.c
@@ -42,7 +42,12 @@ lws_handle_POLLOUT_event(struct libwebsocket_context *context,
}
/* leave POLLOUT active either way */
return 0;
- }
+ } else
+ if (wsi->state == WSI_STATE_FLUSHING_STORED_SEND_BEFORE_CLOSE) {
+ lwsl_info("***** %x signalling to close in POLLOUT handler\n", wsi);
+ return -1; /* retry closing now */
+ }
+
m = lws_ext_callback_for_each_active(wsi, LWS_EXT_CALLBACK_IS_WRITEABLE,
NULL, 0);