From b84b598eae8293dc02bf91cfb4f1cde9516f2fe0 Mon Sep 17 00:00:00 2001 From: Gilad Benjamini Date: Wed, 21 Apr 2010 01:15:19 -0400 Subject: [PATCH] Clean up properly when adding a signal handler fails. Previously, when a signation() or signal() call failed, we would free the element we added to sh_old, but not actually clear the pointer. This would leave a dangling pointer in sh_old that could cause a crash later. --- signal.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/signal.c b/signal.c index be02f9d5..386f4763 100644 --- a/signal.c +++ b/signal.c @@ -185,12 +185,14 @@ _evsig_set_handler(struct event_base *base, if (sigaction(evsignal, &sa, sig->sh_old[evsignal]) == -1) { event_warn("sigaction"); mm_free(sig->sh_old[evsignal]); + sig->sh_old[evsignal] = NULL; return (-1); } #else if ((sh = signal(evsignal, handler)) == SIG_ERR) { event_warn("signal"); mm_free(sig->sh_old[evsignal]); + sig->sh_old[evsignal] = NULL; return (-1); } *sig->sh_old[evsignal] = sh;