From f0ff7659f3128bb727a3ff380334eed3ceac2c0b Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 26 Aug 2010 15:09:58 -0400 Subject: [PATCH] Fix an issue with forking and signal socketpairs in select/poll backends Nicholas Marriott identifies an issue where a signal socketpair doesn't get recreated if the event backend doesn't set event_reinit. --- event.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/event.c b/event.c index 74ba5c4e..79d2be07 100644 --- a/event.c +++ b/event.c @@ -279,9 +279,14 @@ event_reinit(struct event_base *base) int res = 0; struct event *ev; +#if 0 + /* Right now, reinit always takes effect, since even if the + backend doesn't require it, the signal socketpair code does. + */ /* check if this event mechanism requires reinit */ if (!evsel->need_reinit) return (0); +#endif /* prevent internal delete */ if (base->sig.ev_signal_added) { @@ -294,7 +299,7 @@ event_reinit(struct event_base *base) EVLIST_ACTIVE); base->sig.ev_signal_added = 0; } - + if (base->evsel->dealloc != NULL) base->evsel->dealloc(base, base->evbase); evbase = base->evbase = evsel->init(base);