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);
+ }
}
/*