From 59a7bda1d950338665aba1775cea6936c4292cfe Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Fri, 13 Apr 2012 15:44:02 +0000 Subject: [PATCH] stop leaking every ecore system signal event. People, when you go and change ecore_event_add() to _ecore_event_add(), please NOTICE THAT THE FREE FUNCTION IS NOT AUTOMATICALLY SPECIFIED! So specify these functions to _ecore_event_add() to stop leaking every signal we receive from system. SVN revision: 70177 --- legacy/ecore/ChangeLog | 1 + legacy/ecore/src/lib/ecore/ecore_signal.c | 28 +++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/legacy/ecore/ChangeLog b/legacy/ecore/ChangeLog index 6445ca6797..6c54ebb690 100644 --- a/legacy/ecore/ChangeLog +++ b/legacy/ecore/ChangeLog @@ -615,3 +615,4 @@ * remove EAPI from _ecore_event_signal_user_new(). It should never be exported outside of libecore.so + * stop leaking every system signal event. diff --git a/legacy/ecore/src/lib/ecore/ecore_signal.c b/legacy/ecore/src/lib/ecore/ecore_signal.c index 78edb8c5f0..57df0274ba 100644 --- a/legacy/ecore/src/lib/ecore/ecore_signal.c +++ b/legacy/ecore/src/lib/ecore/ecore_signal.c @@ -133,6 +133,13 @@ _ecore_signal_count_get(void) return sig_count; } +static void +_ecore_signal_generic_free(void *data __UNUSED__, + void *event) +{ + free(event); +} + void _ecore_signal_call(void) { @@ -248,7 +255,8 @@ _ecore_signal_call(void) if ((n < MAXSIGQ) && (sigusr1_info[n].si_signo)) e->data = sigusr1_info[n]; - _ecore_event_add(ECORE_EVENT_SIGNAL_USER, e, NULL, NULL); + _ecore_event_add(ECORE_EVENT_SIGNAL_USER, e, + _ecore_signal_generic_free, NULL); } sig_count--; } @@ -269,7 +277,8 @@ _ecore_signal_call(void) if ((n < MAXSIGQ) && (sigusr2_info[n].si_signo)) e->data = sigusr2_info[n]; - _ecore_event_add(ECORE_EVENT_SIGNAL_USER, e, NULL, NULL); + _ecore_event_add(ECORE_EVENT_SIGNAL_USER, e, + _ecore_signal_generic_free, NULL); } sig_count--; } @@ -288,7 +297,8 @@ _ecore_signal_call(void) if ((n < MAXSIGQ) && (sighup_info[n].si_signo)) e->data = sighup_info[n]; - _ecore_event_add(ECORE_EVENT_SIGNAL_HUP, e, NULL, NULL); + _ecore_event_add(ECORE_EVENT_SIGNAL_HUP, e, + _ecore_signal_generic_free, NULL); } sig_count--; } @@ -309,7 +319,8 @@ _ecore_signal_call(void) if ((n < MAXSIGQ) && (sigquit_info[n].si_signo)) e->data = sigquit_info[n]; - _ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, e, NULL, NULL); + _ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, e, + _ecore_signal_generic_free, NULL); } sig_count--; } @@ -330,7 +341,8 @@ _ecore_signal_call(void) if ((n < MAXSIGQ) && (sigint_info[n].si_signo)) e->data = sigint_info[n]; - _ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, e, NULL, NULL); + _ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, e, + _ecore_signal_generic_free, NULL); } sig_count--; } @@ -351,7 +363,8 @@ _ecore_signal_call(void) if ((n < MAXSIGQ) && (sigterm_info[n].si_signo)) e->data = sigterm_info[n]; - _ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, e, NULL, NULL); + _ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, e, + _ecore_signal_generic_free, NULL); } sig_count--; } @@ -371,7 +384,8 @@ _ecore_signal_call(void) if ((n < MAXSIGQ) && (sigpwr_info[n].si_signo)) e->data = sigpwr_info[n]; - _ecore_event_add(ECORE_EVENT_SIGNAL_POWER, e, NULL, NULL); + _ecore_event_add(ECORE_EVENT_SIGNAL_POWER, e, + _ecore_signal_generic_free, NULL); } sig_count--; }