lib: tevent: Fix memory leak reported by Pavel Březina <pbrezina@redhat.com> when...
authorJeremy Allison <jra@samba.org>
Tue, 16 Feb 2016 22:23:53 +0000 (14:23 -0800)
committerKarolin Seeger <kseeger@samba.org>
Mon, 18 Apr 2016 10:59:26 +0000 (12:59 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11742
Bug: https://bugzilla.samba.org/show_bug.cgi?id=11771

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Thu Feb 18 01:42:50 CET 2016 on sn-devel-144

(cherry picked from commit 833a2f474367624dd9980abb28227850e95fe976)

lib/tevent/tevent_signal.c

index 924dc05c029d65cf5a167be278bd98035e5b13fd..9bc11edca42f5d3760a3035a507da73a70f3a780 100644 (file)
@@ -212,6 +212,7 @@ static int tevent_signal_destructor(struct tevent_signal *se)
                /* restore old handler, if any */
                if (sig_state->oldact[se->signum]) {
                        sigaction(se->signum, sig_state->oldact[se->signum], NULL);
+                       talloc_free(sig_state->oldact[se->signum]);
                        sig_state->oldact[se->signum] = NULL;
                }
 #ifdef SA_SIGINFO
@@ -342,6 +343,8 @@ struct tevent_signal *tevent_common_add_signal(struct tevent_context *ev,
                        return NULL;
                }
                if (sigaction(signum, &act, sig_state->oldact[signum]) == -1) {
+                       talloc_free(sig_state->oldact[signum]);
+                       sig_state->oldact[signum] = NULL;
                        talloc_free(se);
                        return NULL;
                }
@@ -505,6 +508,7 @@ void tevent_cleanup_pending_signal_handlers(struct tevent_signal *se)
        if (sig_state->sig_handlers[se->signum] == NULL) {
                if (sig_state->oldact[se->signum]) {
                        sigaction(se->signum, sig_state->oldact[se->signum], NULL);
+                       talloc_free(sig_state->oldact[se->signum]);
                        sig_state->oldact[se->signum] = NULL;
                }
        }