]> granicus.if.org Git - libevent/commitdiff
When running with deferred callbacks, always send the "connected" event
authorNick Mathewson <nickm@torproject.org>
Tue, 11 Aug 2009 19:47:46 +0000 (19:47 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 11 Aug 2009 19:47:46 +0000 (19:47 +0000)
before any read/write events, and send timeout/error/eof events after.

svn:r1413

bufferevent.c

index 051060450160b1f69459048a25c1cd9df3835ecd..4de9b1e92da662e160113927bb21b0c96260d1d8 100644 (file)
@@ -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);