File pacemaker-libcrmcommon-free-signal-triggers-when-cleaning-up-mainloop.patch of Package pacemaker.19778

commit a70e665bea76d99ebb8809dd522dd2049c544fa7
Author: Ken Gaillot <kgaillot@redhat.com>
Date:   Tue Apr 10 15:16:25 2018 -0500

    Low: libcrmcommon: free signal triggers when cleaning up mainloop
    
    Not really necessary, but cleans up memory at exit better

diff --git a/lib/common/mainloop.c b/lib/common/mainloop.c
index ba2f8d524..ce9f0ec3d 100644
--- a/lib/common/mainloop.c
+++ b/lib/common/mainloop.c
@@ -311,6 +311,17 @@ crm_signal(int sig, void (*dispatch) (int sig))
     return TRUE;
 }
 
+static void
+mainloop_destroy_signal_entry(int sig)
+{
+    crm_signal_t *tmp = crm_signals[sig];
+
+    crm_signals[sig] = NULL;
+
+    crm_trace("Destroying signal %d", sig);
+    mainloop_destroy_trigger((crm_trigger_t *) tmp);
+}
+
 gboolean
 mainloop_add_signal(int sig, void (*dispatch) (int sig))
 {
@@ -348,11 +359,7 @@ mainloop_add_signal(int sig, void (*dispatch) (int sig))
     crm_signals[sig]->signal = sig;
 
     if (crm_signal(sig, mainloop_signal_handler) == FALSE) {
-        crm_signal_t *tmp = crm_signals[sig];
-
-        crm_signals[sig] = NULL;
-
-        mainloop_destroy_trigger((crm_trigger_t *) tmp);
+        mainloop_destroy_signal_entry(sig);
         return FALSE;
     }
 #if 0
@@ -372,8 +379,6 @@ mainloop_add_signal(int sig, void (*dispatch) (int sig))
 gboolean
 mainloop_destroy_signal(int sig)
 {
-    crm_signal_t *tmp = NULL;
-
     if (sig >= NSIG || sig < 0) {
         crm_err("Signal %d is out of range", sig);
         return FALSE;
@@ -385,11 +390,7 @@ mainloop_destroy_signal(int sig)
     } else if (crm_signals[sig] == NULL) {
         return TRUE;
     }
-
-    crm_trace("Destroying signal %d", sig);
-    tmp = crm_signals[sig];
-    crm_signals[sig] = NULL;
-    mainloop_destroy_trigger((crm_trigger_t *) tmp);
+    mainloop_destroy_signal_entry(sig);
     return TRUE;
 }
 
@@ -398,9 +399,13 @@ static qb_array_t *gio_map = NULL;
 void
 mainloop_cleanup(void) 
 {
-    if(gio_map) {
+    if (gio_map) {
         qb_array_free(gio_map);
     }
+
+    for (int sig = 0; sig < NSIG; ++sig) {
+        mainloop_destroy_signal_entry(sig);
+    }
 }
 
 /*
openSUSE Build Service is sponsored by