diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc index 91bf4f291c6..082be2e8cdf 100644 --- a/proxy/http/HttpSM.cc +++ b/proxy/http/HttpSM.cc @@ -465,11 +465,8 @@ HttpSM::state_add_to_list(int event, void * /* data ATS_UNUSED */) if (ua_entry->read_vio) { // Seems like ua_entry->read_vio->disable(); should work, but that was // not sufficient to stop the state machine from processing IO events until the - // TXN_START hooks had completed - // Preserve the current read cont and mutex - NetVConnection *netvc = ((ProxyTransaction *)ua_entry->vc)->get_netvc(); - ink_assert(netvc != nullptr); - ua_entry->read_vio = ua_entry->vc->do_io_read(netvc->read_vio_cont(), 0, nullptr); + // TXN_START hooks had completed. Just set the number of bytes to read to 0 + ua_entry->read_vio = ua_entry->vc->do_io_read(this, 0, nullptr); } return EVENT_CONT; } diff --git a/proxy/http2/Http2Stream.cc b/proxy/http2/Http2Stream.cc index 25a4d640ab2..41eeed8f8cf 100644 --- a/proxy/http2/Http2Stream.cc +++ b/proxy/http2/Http2Stream.cc @@ -259,13 +259,16 @@ Http2Stream::send_request(Http2ConnectionState &cstate) return; } - if (this->recv_end_stream) { - this->read_vio.nbytes = bufindex; - this->signal_read_event(VC_EVENT_READ_COMPLETE); - } else { - // End of header but not end of stream, must have some body frames coming - this->has_body = true; - this->signal_read_event(VC_EVENT_READ_READY); + // Is the _sm ready to process the header? + if (this->read_vio.nbytes > 0) { + if (this->recv_end_stream) { + this->read_vio.nbytes = bufindex; + this->signal_read_event(VC_EVENT_READ_COMPLETE); + } else { + // End of header but not end of stream, must have some body frames coming + this->has_body = true; + this->signal_read_event(VC_EVENT_READ_READY); + } } }