This is an automated email from the ASF dual-hosted git repository.
zwoop pushed a commit to branch 9.1.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/9.1.x by this push:
new 7d02640 Fix crash in open_close_h2 (#7586)
7d02640 is described below
commit 7d02640ff61a2ac482eb4941aef6c9dbbc76b444
Author: Susan Hinrichs <[email protected]>
AuthorDate: Wed May 26 00:40:30 2021 -0500
Fix crash in open_close_h2 (#7586)
(cherry picked from commit 050b2dfe9a89348b4105183a2b31e7cc59fc389d)
---
proxy/http/HttpSM.cc | 7 ++-----
proxy/http2/Http2Stream.cc | 17 ++++++++++-------
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index 6a6edf5..c0f689b 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -473,11 +473,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 53146bc..acfa373 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);
+ }
}
}