n_to_read = bytes_to_read(bev_ssl);
}
- _bufferevent_run_readcb(bev);
+ if (read_data == 1) {
+ struct bufferevent *bev = &bev_ssl->bev.bev;
+ struct evbuffer *input = bev->input;
+
+ if (evbuffer_get_length(input) >= bev->wm_read.low) {
++ bufferevent_run_readcb_(bev);
+ }
+ }
+
if (!bev_ssl->underlying) {
/* Should be redundant, but let's avoid busy-looping */
if (bev_ssl->bev.read_suspended ||
r = do_read(bev_ssl, 1024); /* XXXX 1024 is a hack */
if (r <= 0)
break;
- _bufferevent_run_readcb(bev);
+ else {
+ struct bufferevent *bev = &bev_ssl->bev.bev;
+ struct evbuffer *input = bev->input;
+
+ if (evbuffer_get_length(input) >= bev->wm_read.low) {
++ bufferevent_run_readcb_(bev);
+ }
+ }
}
if (bev_ssl->read_blocked_on_write)
return;