From: Nick Mathewson Date: Thu, 25 Oct 2012 02:55:17 +0000 (-0400) Subject: Merge remote-tracking branch 'origin/patches-2.0' X-Git-Tag: release-2.1.2-alpha~42 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cda69d0df00b8ee28755731b225123d10a999acc;p=libevent Merge remote-tracking branch 'origin/patches-2.0' Conflicts: bufferevent_openssl.c --- cda69d0df00b8ee28755731b225123d10a999acc diff --cc bufferevent_openssl.c index 6e9c99f8,e01909ec..2f07cb6b --- a/bufferevent_openssl.c +++ b/bufferevent_openssl.c @@@ -933,26 -930,28 +933,28 @@@ static voi be_openssl_readeventcb(evutil_socket_t fd, short what, void *ptr) { struct bufferevent_openssl *bev_ssl = ptr; - _bufferevent_incref_and_lock(&bev_ssl->bev.bev); + bufferevent_incref_and_lock_(&bev_ssl->bev.bev); - if (what & EV_TIMEOUT) { + if (what == EV_TIMEOUT) { - _bufferevent_run_eventcb(&bev_ssl->bev.bev, + bufferevent_run_eventcb_(&bev_ssl->bev.bev, BEV_EVENT_TIMEOUT|BEV_EVENT_READING); - } else + } else { consider_reading(bev_ssl); + } - _bufferevent_decref_and_unlock(&bev_ssl->bev.bev); + bufferevent_decref_and_unlock_(&bev_ssl->bev.bev); } static void be_openssl_writeeventcb(evutil_socket_t fd, short what, void *ptr) { struct bufferevent_openssl *bev_ssl = ptr; - _bufferevent_incref_and_lock(&bev_ssl->bev.bev); + bufferevent_incref_and_lock_(&bev_ssl->bev.bev); - if (what & EV_TIMEOUT) { + if (what == EV_TIMEOUT) { - _bufferevent_run_eventcb(&bev_ssl->bev.bev, + bufferevent_run_eventcb_(&bev_ssl->bev.bev, BEV_EVENT_TIMEOUT|BEV_EVENT_WRITING); + } else { + consider_writing(bev_ssl); } - consider_writing(bev_ssl); - _bufferevent_decref_and_unlock(&bev_ssl->bev.bev); + bufferevent_decref_and_unlock_(&bev_ssl->bev.bev); } static int diff --cc bufferevent_sock.c index e1fcadc6,19e90d5a..eaaf9414 --- a/bufferevent_sock.c +++ b/bufferevent_sock.c @@@ -131,9 -130,12 +131,12 @@@ bufferevent_readcb(evutil_socket_t fd, short what = BEV_EVENT_READING; ev_ssize_t howmuch = -1, readmax=-1; - _bufferevent_incref_and_lock(bufev); + bufferevent_incref_and_lock_(bufev); if (event == EV_TIMEOUT) { + /* Note that we only check for event==EV_TIMEOUT. If + * event==EV_TIMEOUT|EV_READ, we can safely ignore the + * timeout, since a read has occurred */ what |= BEV_EVENT_TIMEOUT; goto error; } @@@ -207,9 -209,12 +210,12 @@@ bufferevent_writecb(evutil_socket_t fd int connected = 0; ev_ssize_t atmost = -1; - _bufferevent_incref_and_lock(bufev); + bufferevent_incref_and_lock_(bufev); if (event == EV_TIMEOUT) { + /* Note that we only check for event==EV_TIMEOUT. If + * event==EV_TIMEOUT|EV_WRITE, we can safely ignore the + * timeout, since a read has occurred */ what |= BEV_EVENT_TIMEOUT; goto error; }