diff options
Diffstat (limited to 'thirdparty/libwebsockets/roles/h1/ops-h1.c')
-rw-r--r-- | thirdparty/libwebsockets/roles/h1/ops-h1.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/thirdparty/libwebsockets/roles/h1/ops-h1.c b/thirdparty/libwebsockets/roles/h1/ops-h1.c index d3b16f4d1f..9001c864ea 100644 --- a/thirdparty/libwebsockets/roles/h1/ops-h1.c +++ b/thirdparty/libwebsockets/roles/h1/ops-h1.c @@ -195,6 +195,7 @@ postbody_completion: } break; + case LRS_RETURNED_CLOSE: case LRS_AWAITING_CLOSE_ACK: case LRS_WAITING_TO_SEND_CLOSE: case LRS_SHUTDOWN: @@ -444,6 +445,16 @@ try_pollout: if (lwsi_state(wsi) != LRS_ISSUING_FILE) { + if (wsi->trunc_len) { + //lwsl_notice("%s: completing partial\n", __func__); + if (lws_issue_raw(wsi, wsi->trunc_alloc + wsi->trunc_offset, + wsi->trunc_len) < 0) { + lwsl_info("%s signalling to close\n", __func__); + goto fail; + } + return LWS_HPI_RET_HANDLED; + } + lws_stats_atomic_bump(wsi->context, pt, LWSSTATS_C_WRITEABLE_CB, 1); #if defined(LWS_WITH_STATS) @@ -655,6 +666,9 @@ rops_destroy_role_h1(struct lws *wsi) ah = ah->next; } +#ifdef LWS_ROLE_WS + lws_free_set_NULL(wsi->ws); +#endif return 0; } |