From: Nick Mathewson Date: Thu, 18 Feb 2010 19:50:44 +0000 (-0500) Subject: When connect() succeeds immediately, don't invoke the callback immediately. X-Git-Tag: release-2.0.4-alpha~22 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7515de91fe6c721d304d06cedc8af8d334916eaf;p=libevent When connect() succeeds immediately, don't invoke the callback immediately. We need this to get unit tests to pass on freebsd. --- diff --git a/bufferevent_sock.c b/bufferevent_sock.c index 36893a75..7ce42667 100644 --- a/bufferevent_sock.c +++ b/bufferevent_sock.c @@ -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;