From cec7ee05dca77cd62cce9bb52e612b8c429d500f Mon Sep 17 00:00:00 2001 From: "Evgeny Grin (Karlson2k)" Date: Sat, 31 Oct 2020 19:28:04 +0300 Subject: [PATCH] Fixed deadlock introduced by c5b4a9deb550ab5a8a0bb36103a9547da21f8982 --- src/microhttpd/daemon.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c index 640964b8..91ad5406 100644 --- a/src/microhttpd/daemon.c +++ b/src/microhttpd/daemon.c @@ -7109,11 +7109,15 @@ close_all_connections (struct MHD_Daemon *daemon) mhd_assert (NULL != pos->urh); if (! pos->thread_joined) { - /* No need to unlock "cleanup" mutex as upgraded connection - * doesn't manipulate "cleanup" list. */ + /* While "cleanup" list is not manipulated by "upgraded" + * connection, "cleanup" mutex is required for call of + * MHD_resume_connection() during finishing of "upgraded" + * thread. */ + MHD_mutex_unlock_chk_ (&daemon->cleanup_connection_mutex); if (! MHD_join_thread_ (pos->pid.handle)) MHD_PANIC (_ ("Failed to join a thread.\n")); pos->thread_joined = true; + MHD_mutex_lock_chk_ (&daemon->cleanup_connection_mutex); } } }