]> granicus.if.org Git - libevent/commitdiff
When connect() succeeds immediately, don't invoke the callback immediately.
authorNick Mathewson <nickm@torproject.org>
Thu, 18 Feb 2010 19:50:44 +0000 (14:50 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 18 Feb 2010 19:50:44 +0000 (14:50 -0500)
We need this to get unit tests to pass on freebsd.

bufferevent_sock.c

index 36893a75d9039a59031d8617b755dc0572837922..7ce42667d7d589f3ba8919705f9e358901bd4692 100644 (file)
@@ -276,8 +276,9 @@ bufferevent_writecb(evutil_socket_t fd, short event, void *arg)
         * low watermark.
         */
        if ((res || !connected) &&
-           evbuffer_get_length(bufev->output) <= bufev->wm_write.low)
+           evbuffer_get_length(bufev->output) <= bufev->wm_write.low) {
                _bufferevent_run_writecb(bufev);
+       }
 
        goto done;
 
@@ -390,14 +391,10 @@ bufferevent_socket_connect(struct bufferevent *bev,
                        goto done;
                }
        } else {
-               /* The connect succeeded already. How odd. */
+               /* The connect succeeded already. How very BSD of it. */
                result = 0;
-               /* XXXX The strcmp here is a stupid hack to prevent delivering
-                * a CONNECTED to an SSL bufferevent before its SSL is done
-                * negotiating.  Really we should find some way to do this that
-                * isn't an explicit type-check. */
-               if (strcmp(bev->be_ops->type, "ssl"))
-                       _bufferevent_run_eventcb(bev, BEV_EVENT_CONNECTED);
+               bufev_p->connecting = 1;
+               event_active(&bev->ev_write, EV_WRITE, 1);
        }
 
        goto done;