diff --git a/lib/secure-streams/secure-streams-client.c b/lib/secure-streams/secure-streams-client.c index b55301703..f8c205391 100644 --- a/lib/secure-streams/secure-streams-client.c +++ b/lib/secure-streams/secure-streams-client.c @@ -523,12 +523,8 @@ lws_sspc_destroy(lws_sspc_handle_t **ph) if (h->dsh) lws_dsh_destroy(&h->dsh); - if (h->cwsi) { - struct lws *wsi = h->cwsi; + if (h->cwsi) h->cwsi = NULL; - if (wsi) - lws_set_timeout(wsi, 1, LWS_TO_KILL_SYNC); - } /* clean out any pending metadata changes that didn't make it */ diff --git a/lib/secure-streams/secure-streams-serialize.c b/lib/secure-streams/secure-streams-serialize.c index c2eca6a54..0ba8cb285 100644 --- a/lib/secure-streams/secure-streams-serialize.c +++ b/lib/secure-streams/secure-streams-serialize.c @@ -693,10 +693,19 @@ payload_ff: parser); h->txc.peer_tx_cr_est -= n; - if (client_pss_to_sspc_h(pss, ssi)) + if (client_pss_to_sspc_h(pss, ssi)) { /* we still have an sspc handle */ - ssi->rx(client_pss_to_userdata(pss), + int ret = ssi->rx(client_pss_to_userdata(pss), (uint8_t *)cp, n, flags); + switch (ret) { + case LWSSSSRET_OK: + break; + case LWSSSSRET_DISCONNECT_ME: + goto hangup; + case LWSSSSRET_DESTROY_ME: + return LWSSSSRET_DESTROY_ME; + } + } #if defined(LWS_WITH_DETAILED_LATENCY) if (lws_det_lat_active(context)) {