Ver Fonte

Fixed deadlock introduced by c5b4a9deb550ab5a8a0bb36103a9547da21f8982

Evgeny Grin (Karlson2k) há 5 anos atrás
pai
commit
cec7ee05dc
1 ficheiros alterados com 6 adições e 2 exclusões
  1. 6 2
      src/microhttpd/daemon.c

+ 6 - 2
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);
       }
     }
   }