You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2020/02/27 18:27:00 UTC
[trafficserver] branch 9.0.x updated: Fix crash when H2 client does
not set End-of-data bit
This is an automated email from the ASF dual-hosted git repository.
zwoop pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/9.0.x by this push:
new a3def78 Fix crash when H2 client does not set End-of-data bit
a3def78 is described below
commit a3def78cdac77bce38901a850d9405605a6dc528
Author: Susan Hinrichs <sh...@verizonmedia.com>
AuthorDate: Tue Feb 11 22:23:46 2020 +0000
Fix crash when H2 client does not set End-of-data bit
(cherry picked from commit 7d4f66b0b25f6aaccc2f9c7d2bde58ce2b47bd15)
---
proxy/http/HttpSM.cc | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index af18ab8..f276cb1 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -2747,6 +2747,8 @@ HttpSM::tunnel_handler_post(int event, void *data)
handle_post_failure();
break;
case HTTP_SM_POST_UA_FAIL:
+ // Client side failed. Shutdown and go home. No need to communicate back to UA
+ terminate_sm = true;
break;
case HTTP_SM_POST_SUCCESS:
// It's time to start reading the response
@@ -3488,9 +3490,7 @@ HttpSM::tunnel_handler_post_ua(int event, HttpTunnelProducer *p)
hsm_release_assert(ua_entry->in_tunnel == true);
if (p->consumer_list.head && p->consumer_list.head->vc_type == HT_TRANSFORM) {
hsm_release_assert(post_transform_info.entry->in_tunnel == true);
- } else if (server_entry != nullptr) {
- hsm_release_assert(server_entry->in_tunnel == true);
- }
+ } // server side may have completed before the user agent side, so it may no longer be in tunnel
break;
case VC_EVENT_READ_COMPLETE:
@@ -3627,7 +3627,8 @@ HttpSM::tunnel_handler_post_server(int event, HttpTunnelConsumer *c)
case VC_EVENT_WRITE_COMPLETE:
// Completed successfully
- c->write_success = true;
+ c->write_success = true;
+ server_entry->in_tunnel = false;
break;
default:
ink_release_assert(0);