Don't read too greedily

This commit is contained in:
Tatsuhiro Tsujikawa 2019-06-25 22:38:43 +09:00
parent a76d0723b5
commit 83d362c6d2
2 changed files with 9 additions and 2 deletions

View File

@ -650,6 +650,7 @@ int Http2Handler::read_clear() {
} }
return -1; return -1;
} }
break;
} }
return write_(*this); return write_(*this);
@ -775,6 +776,7 @@ int Http2Handler::read_tls() {
} }
return -1; return -1;
} }
break;
} }
fin: fin:

View File

@ -111,6 +111,7 @@ void writecb(struct ev_loop *loop, ev_io *w, int revents) {
int ClientHandler::noop() { return 0; } int ClientHandler::noop() { return 0; }
int ClientHandler::read_clear() { int ClientHandler::read_clear() {
auto should_break = false;
rb_.ensure_chunk(); rb_.ensure_chunk();
for (;;) { for (;;) {
if (rb_.rleft() && on_read() != 0) { if (rb_.rleft() && on_read() != 0) {
@ -123,7 +124,7 @@ int ClientHandler::read_clear() {
return 0; return 0;
} }
if (!ev_is_active(&conn_.rev)) { if (!ev_is_active(&conn_.rev) || should_break) {
return 0; return 0;
} }
@ -141,6 +142,7 @@ int ClientHandler::read_clear() {
} }
rb_.write(nread); rb_.write(nread);
should_break = true;
} }
} }
@ -205,6 +207,8 @@ int ClientHandler::tls_handshake() {
} }
int ClientHandler::read_tls() { int ClientHandler::read_tls() {
auto should_break = false;
ERR_clear_error(); ERR_clear_error();
rb_.ensure_chunk(); rb_.ensure_chunk();
@ -221,7 +225,7 @@ int ClientHandler::read_tls() {
return 0; return 0;
} }
if (!ev_is_active(&conn_.rev)) { if (!ev_is_active(&conn_.rev) || should_break) {
return 0; return 0;
} }
@ -239,6 +243,7 @@ int ClientHandler::read_tls() {
} }
rb_.write(nread); rb_.write(nread);
should_break = true;
} }
} }