From 750f0a60e6382670818c1a26145d0dfac9b59d51 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Thu, 12 Aug 2021 08:25:22 +0100 Subject: [PATCH] smd: avoid recursive lock when unregistering during delivery --- lib/system/smd/smd.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/system/smd/smd.c b/lib/system/smd/smd.c index 763070169..3a8b598d8 100644 --- a/lib/system/smd/smd.c +++ b/lib/system/smd/smd.c @@ -653,10 +653,12 @@ lws_smd_unregister(struct lws_smd_peer *pr) { lws_smd_t *smd = lws_container_of(pr->list.owner, lws_smd_t, owner_peers); - lws_mutex_lock(smd->lock_peers); /* +++++++++++++++++++++++++++ peers */ + if (!smd->delivering) + lws_mutex_lock(smd->lock_peers); /* +++++++++++++++++++ peers */ lwsl_notice("%s: destroying peer %p\n", __func__, pr); _lws_smd_peer_destroy(pr); - lws_mutex_unlock(smd->lock_peers); /* ------------------------- peers */ + if (!smd->delivering) + lws_mutex_unlock(smd->lock_peers); /* ----------------- peers */ } int