Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP5:GA
pacemaker.27560
pacemaker-libcrmcommon-free-signal-triggers-whe...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pacemaker-libcrmcommon-free-signal-triggers-when-cleaning-up-mainloop.patch of Package pacemaker.27560
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); + } } /*
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor