vcl: fix lookup listener assert 07/32307/5
authorliuyacan <liuyacan@corp.netease.com>
Fri, 14 May 2021 02:11:03 +0000 (02:11 +0000)
committerFlorin Coras <florin.coras@gmail.com>
Fri, 14 May 2021 14:35:34 +0000 (14:35 +0000)
The following timing may happen:

1. vpp accept new connection, send ACCEPTED to vcl, but vcl has
   not handle it
2. vcl unbind the listener, go into DISCONNECT state
3. vcl handle the ACCEPTED event

Type: fix

Signed-off-by: liuyacan <liuyacan@corp.netease.com>
Change-Id: If9a96a153af38763db062df133c2fdcc04ceba9b

src/vcl/vcl_private.h

index 956f077..f68ab45 100644 (file)
@@ -527,6 +527,12 @@ vcl_session_table_lookup_listener (vcl_worker_t * wrk, u64 handle)
       return 0;
     }
 
+  if (s->session_state == VCL_STATE_DISCONNECT)
+    {
+      VDBG (0, "listen session [0x%llx] is closing", s->vpp_handle);
+      return 0;
+    }
+
   ASSERT (s->session_state == VCL_STATE_LISTEN
          || s->session_state == VCL_STATE_LISTEN_NO_MQ
          || vcl_session_is_connectable_listener (wrk, s));