diff --git a/event.c b/event.c index bc9e88b2..4a577b9d 100644 --- a/event.c +++ b/event.c @@ -390,8 +390,13 @@ event_reinit(struct event_base *base) /* prevent internal delete */ if (base->sig.ev_signal_added) { + /* we cannot call event_del here because the base has + * not been reinitialized yet. */ event_queue_remove(base, &base->sig.ev_signal, EVLIST_INSERTED); + if (base->sig.ev_signal.ev_flags & EVLIST_ACTIVE) + event_queue_remove(base, &base->sig.ev_signal, + EVLIST_ACTIVE); base->sig.ev_signal_added = 0; } diff --git a/signal.c b/signal.c index 4cbacd4c..2ceed2f3 100644 --- a/signal.c +++ b/signal.c @@ -311,9 +311,9 @@ evsig_process(struct event_base *base) ncalls = sig->evsigcaught[i]; if (ncalls == 0) continue; + sig->evsigcaught[i] -= ncalls; evmap_signal_active(base, i, ncalls); - sig->evsigcaught[i] = 0; } }