From 7515de91fe6c721d304d06cedc8af8d334916eaf Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 18 Feb 2010 14:50:44 -0500 Subject: [PATCH] When connect() succeeds immediately, don't invoke the callback immediately. We need this to get unit tests to pass on freebsd. --- bufferevent_sock.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) 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; -- 2.50.1