diff --git a/lib/client.c b/lib/client.c index b54d0a8e..631c2391 100644 --- a/lib/client.c +++ b/lib/client.c @@ -703,7 +703,7 @@ check_accept: p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_ACCEPT); if (strcmp(p, wsi->u.hdr.ah->initial_handshake_hash_base64)) { - lwsl_warn("lws_client_int_s_hs: accept %s wrong vs %s\n", p, + lwsl_warn("lws_client_int_s_hs: accept '%s' wrong vs '%s'\n", p, wsi->u.hdr.ah->initial_handshake_hash_base64); goto bail2; } diff --git a/lib/context.c b/lib/context.c index 7c73c4b8..f874f08d 100644 --- a/lib/context.c +++ b/lib/context.c @@ -261,6 +261,8 @@ lws_context_destroy(struct lws_context *context) if (!context) return; + context->being_destroyed = 1; + memset(&wsi, 0, sizeof(wsi)); wsi.context = context; diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h index a8277f02..f80cc201 100644 --- a/lib/private-libwebsockets.h +++ b/lib/private-libwebsockets.h @@ -535,6 +535,7 @@ struct lws_context { void *user_space; struct lws_plat_file_ops fops; + unsigned int being_destroyed:1; }; enum { diff --git a/lib/server.c b/lib/server.c index e3e8ef74..71c4021e 100644 --- a/lib/server.c +++ b/lib/server.c @@ -149,6 +149,9 @@ bail: int _lws_rx_flow_control(struct lws *wsi) { + if (!wsi || wsi->context->being_destroyed) + return 0; + /* there is no pending change */ if (!(wsi->rxflow_change_to & LWS_RXFLOW_PENDING_CHANGE)) return 0;