/* Requires lock */
struct bufferevent *bev = &bev_ssl->bev.bev;
struct evbuffer *input = bev->input;
- int r, n, i, n_used = 0, blocked = 0, atmost;
+ int r, n, i, n_used = 0, atmost;
struct evbuffer_iovec space[2];
+ int result = 0;
- atmost = _bufferevent_get_read_max(&bev_ssl->bev);
+ atmost = bufferevent_get_read_max_(&bev_ssl->bev);
if (n_to_read > atmost)
n_to_read = atmost;
* underlying is full */
if (!bev_ssl->read_blocked_on_write)
if (set_rbow(bev_ssl) < 0)
- return -1;
+ return OP_ERR | result;
break;
default:
- conn_closed(bev_ssl, err, r);
+ conn_closed(bev_ssl, BEV_EVENT_READING, err, r);
break;
}
- blocked = 1;
+ result |= OP_BLOCKED;
break; /* out of the loop */
}
}
BEV_RESET_GENERIC_WRITE_TIMEOUT(bev);
if (evbuffer_get_length(output) <= bev->wm_write.low)
- _bufferevent_run_writecb(bev);
+ bufferevent_run_writecb_(bev);
}
- return blocked ? 0 : 1;
+ return result;
}
#define WRITE_FRAME 15000
struct evbuffer *input = bev->input;
if (evbuffer_get_length(input) >= bev->wm_read.low) {
- _bufferevent_run_readcb(bev);
+ bufferevent_run_readcb_(bev);
}
}
+ if (r & (OP_ERR|OP_BLOCKED))
+ break;
}
if (bev_ssl->read_blocked_on_write)
return;