From: Gilad Benjamini Date: Wed, 21 Apr 2010 05:15:19 +0000 (-0400) Subject: Clean up properly when adding a signal handler fails. X-Git-Tag: release-2.0.5-beta~47 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b84b598eae8293dc02bf91cfb4f1cde9516f2fe0;p=libevent 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. --- 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;