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 931bb79 Fix assert when client aborts during backfill (#6809) 931bb79 is described below commit 931bb797730219c6826ef56b577454e03e67a132 Author: Susan Hinrichs <shinr...@yahoo-inc.com> AuthorDate: Fri Jun 12 17:05:41 2020 -0500 Fix assert when client aborts during backfill (#6809) Co-authored-by: Susan Hinrichs <shinr...@verizonmedia.com> (cherry picked from commit 34c30b1528007bef42cd8c4e26a24f3a68ec988e) --- proxy/http/Http1ClientSession.cc | 12 ++++++++++++ proxy/http/Http1ClientSession.h | 10 +++++----- proxy/http/HttpSM.cc | 5 +++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/proxy/http/Http1ClientSession.cc b/proxy/http/Http1ClientSession.cc index 0c402bf..ae3f992 100644 --- a/proxy/http/Http1ClientSession.cc +++ b/proxy/http/Http1ClientSession.cc @@ -286,6 +286,8 @@ Http1ClientSession::do_io_close(int alerrno) _reader->consume(_reader->read_avail()); } else { read_state = HCS_CLOSED; + SET_HANDLER(&Http1ClientSession::state_wait_for_sm_shutdown); + ka_vio = _vc->do_io_read(this, INT64_MAX, read_buffer); HttpSsnDebug("[%" PRId64 "] session closed", con_id); HTTP_SUM_DYN_STAT(http_transactions_per_client_con, transact_count); HTTP_DECREMENT_DYN_STAT(http_current_client_connections_stat); @@ -297,6 +299,16 @@ Http1ClientSession::do_io_close(int alerrno) } int +Http1ClientSession::state_wait_for_sm_shutdown(int event, void *data) +{ + STATE_ENTER(&Http1ClientSession::state_wait_for_sm_shutdown, event, data); + ink_assert(read_state == HCS_CLOSED); + + // Just eat IO events until the state machine has finished + return 0; +} + +int Http1ClientSession::state_wait_for_close(int event, void *data) { STATE_ENTER(&Http1ClientSession::state_wait_for_close, event, data); diff --git a/proxy/http/Http1ClientSession.h b/proxy/http/Http1ClientSession.h index 0a624d2..ca2739a 100644 --- a/proxy/http/Http1ClientSession.h +++ b/proxy/http/Http1ClientSession.h @@ -99,6 +99,7 @@ private: int state_keep_alive(int event, void *data); int state_slave_keep_alive(int event, void *data); int state_wait_for_close(int event, void *data); + int state_wait_for_sm_shutdown(int event, void *data); enum C_Read_State { HCS_INIT, @@ -108,11 +109,10 @@ private: HCS_CLOSED, }; - NetVConnection *client_vc = nullptr; - int magic = HTTP_SS_MAGIC_DEAD; - int transact_count = 0; - bool half_close = false; - bool conn_decrease = false; + int magic = HTTP_SS_MAGIC_DEAD; + int transact_count = 0; + bool half_close = false; + bool conn_decrease = false; MIOBuffer *read_buffer = nullptr; IOBufferReader *_reader = nullptr; diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc index 127c06e..04bee2f 100644 --- a/proxy/http/HttpSM.cc +++ b/proxy/http/HttpSM.cc @@ -3224,6 +3224,11 @@ HttpSM::tunnel_handler_ua(int event, HttpTunnelConsumer *c) server_session->get_netvc()->set_active_timeout(HRTIME_SECONDS(t_state.txn_conf->background_fill_active_timeout)); } + // Even with the background fill, the client side should go down + c->write_vio = nullptr; + c->vc->do_io_close(EHTTP_ERROR); + c->alive = false; + } else { // No background fill p = c->producer;