summaryrefslogtreecommitdiff
path: root/bufferevent_openssl.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2012-11-16 18:34:43 -0500
committerNick Mathewson <nickm@torproject.org>2012-11-16 18:34:43 -0500
commit9dee36bc8b72be6c00089af857c1d119886c3ed7 (patch)
tree054b8145860bd99f9724527a3676ab4c7d5577b2 /bufferevent_openssl.c
parente3b2e0869ec4718eb0985444adf24e8c30bdeb92 (diff)
downloadlibevent-9dee36bc8b72be6c00089af857c1d119886c3ed7.tar.gz
Make bufferevent_set_timeouts(bev, NULL, NULL) have plausible semantics
Diffstat (limited to 'bufferevent_openssl.c')
-rw-r--r--bufferevent_openssl.c23
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;
}
}