commit cec7ee05dca77cd62cce9bb52e612b8c429d500f parent c5b4a9deb550ab5a8a0bb36103a9547da21f8982 Author: Evgeny Grin (Karlson2k) <k2k@narod.ru> Date: Sat, 31 Oct 2020 19:28:04 +0300 Fixed deadlock introduced by c5b4a9deb550ab5a8a0bb36103a9547da21f8982 Diffstat:
| M | src/microhttpd/daemon.c | | | 8 | ++++++-- |
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git 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); } } }