diff options
author | Nick Mathewson <nickm@torproject.org> | 2012-11-16 18:34:43 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2012-11-16 18:34:43 -0500 |
commit | 9dee36bc8b72be6c00089af857c1d119886c3ed7 (patch) | |
tree | 054b8145860bd99f9724527a3676ab4c7d5577b2 /bufferevent_openssl.c | |
parent | e3b2e0869ec4718eb0985444adf24e8c30bdeb92 (diff) | |
download | libevent-9dee36bc8b72be6c00089af857c1d119886c3ed7.tar.gz |
Make bufferevent_set_timeouts(bev, NULL, NULL) have plausible semantics
Diffstat (limited to 'bufferevent_openssl.c')
-rw-r--r-- | bufferevent_openssl.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/bufferevent_openssl.c b/bufferevent_openssl.c index 55173d92..99ed5f8d 100644 --- a/bufferevent_openssl.c +++ b/bufferevent_openssl.c @@ -1221,14 +1221,25 @@ be_openssl_adj_timeouts(struct bufferevent *bev) { struct bufferevent_openssl *bev_ssl = upcast(bev); - if (bev_ssl->underlying) + if (bev_ssl->underlying) { return bufferevent_generic_adj_timeouts_(bev); - else { + } else { int r1=0, r2=0; - if (event_pending(&bev->ev_read, EV_READ, NULL)) - r1 = bufferevent_add_event_(&bev->ev_read, &bev->timeout_read); - if (event_pending(&bev->ev_write, EV_WRITE, NULL)) - r2 = bufferevent_add_event_(&bev->ev_write, &bev->timeout_write); + if (event_pending(&bev->ev_read, EV_READ, NULL)) { + if (evutil_timerisset(&bev->timeout_read)) { + r1 = bufferevent_add_event_(&bev->ev_read, &bev->timeout_read); + } else { + event_remove_timer(&bev->ev_read); + } + } + if (event_pending(&bev->ev_write, EV_WRITE, NULL)) { + if (evutil_timerisset(&bev->timeout_write)) { + r2 = bufferevent_add_event_(&bev->ev_write, &bev->timeout_write); + } else { + event_remove_timer(&bev->ev_write); + } + } + return (r1<0 || r2<0) ? -1 : 0; } } |