diff --git a/lib/client.c b/lib/client.c index d6d985b1..752e157c 100644 --- a/lib/client.c +++ b/lib/client.c @@ -719,7 +719,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 6ac24400..e057f0bf 100644 --- a/lib/context.c +++ b/lib/context.c @@ -299,6 +299,8 @@ libwebsocket_context_destroy(struct libwebsocket_context *context) if (!context) return; + context->being_destroyed = 1; + #ifdef LWS_LATENCY if (context->worst_latency_info[0]) lwsl_notice("Worst latency: %s\n", context->worst_latency_info); diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h index 45bb563c..e230d8f1 100644 --- a/lib/private-libwebsockets.h +++ b/lib/private-libwebsockets.h @@ -503,6 +503,8 @@ struct libwebsocket_context { #endif struct lws_token_limits *token_limits; void *user_space; + + unsigned int being_destroyed:1; }; enum { diff --git a/lib/server.c b/lib/server.c index e987042a..dfa8c55f 100644 --- a/lib/server.c +++ b/lib/server.c @@ -137,7 +137,14 @@ int lws_context_init_server(struct lws_context_creation_info *info, int _libwebsocket_rx_flow_control(struct libwebsocket *wsi) { - struct libwebsocket_context *context = wsi->protocol->owning_server; + struct libwebsocket_context *context; + + if (!wsi) + return 0; + + context = wsi->protocol->owning_server; + if (context->being_destroyed) + return 0; /* there is no pending change */ if (!(wsi->rxflow_change_to & LWS_RXFLOW_PENDING_CHANGE))