The global serializer mutex is left in a locked state during the shutdown process. At about the same time, the timer system expires a timer (which takes the global serializer lock) leading to either high CPU use on multiprocessor during shutdown or deadlock on uniprocessor.

Regards
-steve
Index: exec/main.c
===================================================================
--- exec/main.c (revision 2948)
+++ exec/main.c (working copy)
@@ -139,6 +139,8 @@
 
 static sem_t corosync_exit_sem;
 
+static void serialize_unlock (void);
+
 hdb_handle_t corosync_poll_handle_get (void)
 {
        return (corosync_poll_handle);
@@ -157,6 +159,13 @@
 
 static void unlink_all_completed (void)
 {
+       /*
+        * The schedwrk_do API takes the global serializer lock
+        * but doesn't release it because this exit callback is called
+        * before it finishes.  Since we know we are exiting, we unlock it
+        * here
+        */
+       serialize_unlock ();
        poll_stop (corosync_poll_handle);
        totempg_finalize ();
 
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to