o Various HTTP correctness fixes from Scott Lamb
o Fix a bug where deleting signals with the kqueue backend would cause subsequent adds to fail
o Support multiple events listening on the same signal; make signals regular events that go on the same event queue; problem report by Alexander Drozdov.
-
+ o Fix a problem with epoll() and reinit; problem report by Alexander Drozdov.
Changes in 1.4.0:
o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr.
o demote most http warnings to debug messages
++n_deleted;
}
+ for (i = 0; i < base->nactivequeues; ++i) {
+ for (ev = TAILQ_FIRST(base->activequeues[i]); ev; ) {
+ struct event *next = TAILQ_NEXT(ev, ev_active_next);
+ if (!(ev->ev_flags & EVLIST_INTERNAL)) {
+ event_del(ev);
+ ++n_deleted;
+ }
+ ev = next;
+ }
+ }
+
if (n_deleted)
event_debug(("%s: %d events were still set in base",
- __func__, n_deleted));
+ __func__, n_deleted));
if (base->evsel->dealloc != NULL)
base->evsel->dealloc(base, base->evbase);
if (!evsel->need_reinit)
return (0);
+ /* prevent internal delete */
+ if (base->sig.ev_signal_added)
+ base->sig.ev_signal_added = 0;
+
if (base->evsel->dealloc != NULL)
base->evsel->dealloc(base, base->evbase);
evbase = base->evbase = evsel->init(base);
for (i = 0; i < NSIG; ++i) {
if (i < base->sig.sh_old_max && base->sig.sh_old[i] != NULL)
_evsignal_restore_handler(base, i);
- assert(TAILQ_EMPTY(&base->sig.evsigevents[0]));
}
EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[0]);