aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2020-02-04 19:04:34 +0000
committerFlorin Coras <florin.coras@gmail.com>2020-02-04 19:12:36 +0000
commit541406241231c863deb59f794890e16e5ba6ea5a (patch)
tree4e7e18e49968f15ff69fdb7f1a3f4e7a33966cc0
parent9fbacbc56b9f075e9f5fc3f5df1c18043145562c (diff)
vcl: switch to closed state after app close
Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I851db474538de76d5f70dd6d6f83a6487a5a02bd
-rw-r--r--src/vcl/ldp.c1
-rw-r--r--src/vcl/vcl_private.h2
-rw-r--r--src/vcl/vppcom.c8
3 files changed, 7 insertions, 4 deletions
diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c
index 34eba377451..d0cf2b91367 100644
--- a/src/vcl/ldp.c
+++ b/src/vcl/ldp.c
@@ -653,6 +653,7 @@ ldp_select_vcl_map_to_libc (clib_bitmap_t * vclb, fd_set * __restrict libcb)
/* *INDENT-OFF* */
clib_bitmap_foreach (si, vclb, ({
vlsh = vls_session_index_to_vlsh (si);
+ ASSERT (vlsh != VLS_INVALID_HANDLE);
fd = ldp_vlsh_to_fd (vlsh);
if (PREDICT_FALSE (fd < 0))
{
diff --git a/src/vcl/vcl_private.h b/src/vcl/vcl_private.h
index fd9d73c3547..f9fa066e474 100644
--- a/src/vcl/vcl_private.h
+++ b/src/vcl/vcl_private.h
@@ -64,7 +64,7 @@ typedef enum
typedef enum
{
- STATE_START = 0,
+ STATE_CLOSED = 0,
STATE_CONNECT = 0x01,
STATE_LISTEN = 0x02,
STATE_ACCEPT = 0x04,
diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c
index 916ddf94f02..892d65c348c 100644
--- a/src/vcl/vppcom.c
+++ b/src/vcl/vppcom.c
@@ -60,8 +60,8 @@ vppcom_session_state_str (vcl_session_state_t state)
switch (state)
{
- case STATE_START:
- st = "STATE_START";
+ case STATE_CLOSED:
+ st = "STATE_CLOSED";
break;
case STATE_CONNECT:
@@ -1220,7 +1220,7 @@ vppcom_session_create (u8 proto, u8 is_nonblocking)
session = vcl_session_alloc (wrk);
session->session_type = proto;
- session->session_state = STATE_START;
+ session->session_state = STATE_CLOSED;
session->vpp_handle = ~0;
session->is_dgram = vcl_proto_is_dgram (proto);
@@ -1309,6 +1309,8 @@ vcl_session_cleanup (vcl_worker_t * wrk, vcl_session_t * session,
session->vpp_handle, 0);
}
+ session->session_state = STATE_CLOSED;
+
/* Session is removed only after vpp confirms the disconnect */
return rv;