From 36d49391aadeb10b9f3626b62c5c019c4fddf5ed Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Fri, 24 Apr 2020 23:00:11 +0000 Subject: session vcl: propagate transport cleanup notifications Type: improvement Can be used to force app to close a connection on which it still waits for data. Signed-off-by: Florin Coras Change-Id: I7c3a8245cbbc23728e4408feb63a659a11f718ed --- src/vcl/vppcom.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/vcl') diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index a8cebd8c413..0382af45544 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -749,6 +749,17 @@ vcl_session_cleanup_handler (vcl_worker_t * wrk, void *data) return; } + if (msg->type == SESSION_CLEANUP_TRANSPORT) + { + /* Transport was cleaned up before we confirmed close. Probably the + * app is still waiting for some data that cannot be delivered. + * Confirm close to make sure everything is cleaned up */ + if (session->session_state == STATE_VPP_CLOSING) + vcl_session_cleanup (wrk, session, vcl_session_handle (session), + 1 /* do_disconnect */ ); + return; + } + vcl_session_table_del_vpp_handle (wrk, msg->handle); /* Should not happen. App did not close the connection so don't free it. */ if (session->session_state != STATE_CLOSED) -- cgit 1.2.3-korg