From: Florin Coras Date: Tue, 4 Aug 2020 01:55:40 +0000 (-0700) Subject: vcl: confirm reset on transport cleanup X-Git-Tag: v21.06-rc0~323 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;ds=sidebyside;h=0ff7eec2f5b4a1b161399a209bf04d61b0ac165b;p=vpp.git vcl: confirm reset on transport cleanup Type: fix Change-Id: Ife579f305409bf987639634213008a7d7f35acd7 Signed-off-by: Florin Coras --- diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index dd50df153bb..947bf287e2d 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -784,9 +784,22 @@ vcl_session_cleanup_handler (vcl_worker_t * wrk, void *data) /* 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 == VCL_STATE_VPP_CLOSING) - vcl_session_cleanup (wrk, session, vcl_session_handle (session), - 1 /* do_disconnect */ ); + if (session->session_state == VCL_STATE_VPP_CLOSING + || session->session_state == VCL_STATE_DISCONNECT) + { + vcl_session_cleanup (wrk, session, vcl_session_handle (session), + 1 /* do_disconnect */ ); + /* Move to undetermined state to ensure that the session is not + * removed before both vpp and the app cleanup. + * - If the app closes first, the session is moved to CLOSED state + * and the session cleanup notification from vpp removes the + * session. + * - If vpp cleans up the session first, the session is moved to + * DETACHED state lower and subsequently the close from the app + * frees the session + */ + session->session_state = VCL_STATE_UPDATED; + } return; }