From: Nick Mathewson Date: Tue, 11 Aug 2009 19:47:46 +0000 (+0000) Subject: When running with deferred callbacks, always send the "connected" event X-Git-Tag: release-2.0.3-alpha~125 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bd26bace0d2f97efe04c20f9cd949edeb541963c;p=libevent When running with deferred callbacks, always send the "connected" event before any read/write events, and send timeout/error/eof events after. svn:r1413 --- diff --git a/bufferevent.c b/bufferevent.c index 05106045..4de9b1e9 100644 --- a/bufferevent.c +++ b/bufferevent.c @@ -121,6 +121,13 @@ bufferevent_run_deferred_callbacks(struct deferred_cb *_, void *arg) /* XXXX It would be better to run these without holding the * bufferevent lock */ BEV_LOCK(bufev); + if ((bufev_private->eventcb_pending & BEV_EVENT_CONNECTED) && + bufev->errorcb) { + /* The "connected" happened before any reads or writes, so + send it first. */ + bufev_private->eventcb_pending &= ~BEV_EVENT_CONNECTED; + bufev->errorcb(bufev, BEV_EVENT_CONNECTED, bufev->cbarg); + } if (bufev_private->readcb_pending && bufev->readcb) { bufev_private->readcb_pending = 0; bufev->readcb(bufev, bufev->cbarg);