diff --git a/lib/client.c b/lib/client.c index 7dcd1753..8b7176f3 100644 --- a/lib/client.c +++ b/lib/client.c @@ -785,7 +785,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 113901b3..b66e0988 100644 --- a/lib/context.c +++ b/lib/context.c @@ -296,6 +296,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 77e37c13..92ea713f 100644 --- a/lib/private-libwebsockets.h +++ b/lib/private-libwebsockets.h @@ -600,6 +600,8 @@ struct lws_context { short max_http_header_data; short max_http_header_pool; short ah_count_in_use; + + unsigned int being_destroyed:1; }; enum { diff --git a/lib/server.c b/lib/server.c index d535b81a..c92401d2 100644 --- a/lib/server.c +++ b/lib/server.c @@ -152,7 +152,7 @@ _lws_server_listen_accept_flow_control(struct lws_context *context, int on) struct lws *wsi = context->wsi_listening; int n; - if (!wsi) + if (!wsi || context->being_destroyed) return 0; lwsl_debug("%s: wsi %p: state %d\n", __func__, (void *)wsi, on);