From 4d81fee54fe901b705cf5d20298ec826ed19ee3d Mon Sep 17 00:00:00 2001 From: Andy Green Date: Fri, 27 Aug 2021 13:08:03 +0100 Subject: [PATCH] validity: take context and pt lock before close --- lib/core-net/close.c | 2 +- lib/core-net/wsi-timeout.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/core-net/close.c b/lib/core-net/close.c index 1bed39d4b..1a4e0f7f7 100644 --- a/lib/core-net/close.c +++ b/lib/core-net/close.c @@ -340,7 +340,7 @@ lws_addrinfo_clean(struct lws *wsi) #endif } -/* requires cx lock */ +/* requires cx and pt lock */ void __lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason, diff --git a/lib/core-net/wsi-timeout.c b/lib/core-net/wsi-timeout.c index d041947fc..bbaed54c8 100644 --- a/lib/core-net/wsi-timeout.c +++ b/lib/core-net/wsi-timeout.c @@ -206,8 +206,14 @@ lws_validity_cb(lws_sorted_usec_list_t *sul) if (wsi->validity_hup) { lwsl_wsi_info(wsi, "validity too old"); + struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; + + lws_context_lock(wsi->a.context, __func__); + lws_pt_lock(pt, __func__); __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "validity timeout"); + lws_pt_unlock(pt); + lws_context_unlock(wsi->a.context); return; }