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/04/06 18:31:19 UTC
[trafficserver] 17/25: 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 8.1.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit 71519ba534fb5bd5823f2d4a6b7ba56d371775a0
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 b137470..e431c40 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -2696,6 +2696,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
@@ -3441,9 +3443,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:
@@ -3580,7 +3580,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);