Skip to content

Commit 7409958

Browse files
committed
Add handler to catch IO events while waiting for HttpSM to shutdown
1 parent 589b4d2 commit 7409958

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

proxy/http/Http1ClientSession.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,8 @@ Http1ClientSession::do_io_close(int alerrno)
286286
_reader->consume(_reader->read_avail());
287287
} else {
288288
read_state = HCS_CLOSED;
289+
SET_HANDLER(&Http1ClientSession::state_wait_for_sm_shutdown);
290+
ka_vio = client_vc->do_io_read(this, INT64_MAX, read_buffer);
289291
HttpSsnDebug("[%" PRId64 "] session closed", con_id);
290292
HTTP_SUM_DYN_STAT(http_transactions_per_client_con, transact_count);
291293
HTTP_DECREMENT_DYN_STAT(http_current_client_connections_stat);
@@ -296,6 +298,17 @@ Http1ClientSession::do_io_close(int alerrno)
296298
}
297299
}
298300

301+
int
302+
Http1ClientSession::state_wait_for_sm_shutdown(int event, void *data)
303+
{
304+
STATE_ENTER(&Http1ClientSession::state_wait_for_sm_shutdown, event, data);
305+
ink_assert(data == ka_vio);
306+
ink_assert(read_state == HCS_CLOSED);
307+
308+
// Just eat IO events until the state machine has finished
309+
return 0;
310+
}
311+
299312
int
300313
Http1ClientSession::state_wait_for_close(int event, void *data)
301314
{

proxy/http/Http1ClientSession.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class Http1ClientSession : public ProxySession
9999
int state_keep_alive(int event, void *data);
100100
int state_slave_keep_alive(int event, void *data);
101101
int state_wait_for_close(int event, void *data);
102+
int state_wait_for_sm_shutdown(int event, void *data);
102103

103104
enum C_Read_State {
104105
HCS_INIT,

0 commit comments

Comments
 (0)