{
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;
}
}
be_socket_adj_timeouts(struct bufferevent *bufev)
{
int r = 0;
- if (event_pending(&bufev->ev_read, EV_READ, NULL))
- if (be_socket_add(&bufev->ev_read, &bufev->timeout_read) < 0)
- r = -1;
+ if (event_pending(&bufev->ev_read, EV_READ, NULL)) {
+ if (evutil_timerisset(&bufev->timeout_read)) {
+ if (be_socket_add(&bufev->ev_read, &bufev->timeout_read) < 0)
+ r = -1;
+ } else {
+ event_remove_timer(&bufev->ev_read);
+ }
+ }
if (event_pending(&bufev->ev_write, EV_WRITE, NULL)) {
- if (be_socket_add(&bufev->ev_write, &bufev->timeout_write) < 0)
- r = -1;
+ if (evutil_timerisset(&bufev->timeout_write)) {
+ if (be_socket_add(&bufev->ev_write, &bufev->timeout_write) < 0)
+ r = -1;
+ } else {
+ event_remove_timer(&bufev->ev_write);
+ }
}
return r;
}