diff --git a/kqueue.c b/kqueue.c index 3de41bbc..8cb7824e 100644 --- a/kqueue.c +++ b/kqueue.c @@ -404,6 +404,7 @@ static void kq_dealloc(struct event_base *base) { struct kqop *kqop = base->evbase; + evsig_dealloc(base); kqop_free(kqop); } diff --git a/signal.c b/signal.c index 3cf45f2b..b0bde815 100644 --- a/signal.c +++ b/signal.c @@ -334,13 +334,19 @@ evsig_dealloc(struct event_base *base) _evsig_restore_handler(base, i); } - EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[0]); - base->sig.ev_signal_pair[0] = -1; - EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[1]); - base->sig.ev_signal_pair[1] = -1; + if (base->sig.ev_signal_pair[0] != -1) { + EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[0]); + base->sig.ev_signal_pair[0] = -1; + } + if (base->sig.ev_signal_pair[1] != -1) { + EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[1]); + base->sig.ev_signal_pair[1] = -1; + } base->sig.sh_old_max = 0; /* per index frees are handled in evsig_del() */ - if (base->sig.sh_old) + if (base->sig.sh_old) { mm_free(base->sig.sh_old); + base->sig.sh_old = NULL; + } }