vcl: fix api detach if attach failed 34/35834/5
authorFlorin Coras <fcoras@cisco.com>
Wed, 30 Mar 2022 23:08:25 +0000 (16:08 -0700)
committerDamjan Marion <dmarion@me.com>
Thu, 31 Mar 2022 15:43:28 +0000 (15:43 +0000)
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Idd1df83bb01951c2455b23c08e3cc1fcd9b91064

src/vcl/vcl_private.c
src/vcl/vppcom.c

index 95cc0bf..589380d 100644 (file)
@@ -138,6 +138,9 @@ vcl_api_app_worker_add (void)
 void
 vcl_api_app_worker_del (vcl_worker_t * wrk)
 {
+  if (wrk->api_client_handle == ~0)
+    return;
+
   if (vcm->cfg.vpp_app_socket_api)
     return vcl_sapi_app_worker_del (wrk);
 
@@ -249,6 +252,7 @@ vcl_worker_alloc_and_init ()
 
   wrk = vcl_worker_alloc ();
   vcl_set_worker_index (wrk->wrk_index);
+  wrk->api_client_handle = ~0;
   wrk->thread_id = pthread_self ();
   wrk->current_pid = getpid ();
 
index 0e81749..7fffc3b 100644 (file)
@@ -1286,6 +1286,9 @@ vcl_api_handle_disconnect (vcl_worker_t *wrk)
 static void
 vcl_api_detach (vcl_worker_t * wrk)
 {
+  if (wrk->api_client_handle == ~0)
+    return;
+
   vcl_send_app_detach (wrk);
 
   if (vcm->cfg.vpp_app_socket_api)
@@ -1328,7 +1331,10 @@ vppcom_app_create (const char *app_name)
   vcl_worker_alloc_and_init ();
 
   if ((rv = vcl_api_attach ()))
-    return rv;
+    {
+      vppcom_app_destroy ();
+      return rv;
+    }
 
   VDBG (0, "app_name '%s', my_client_index %d (0x%x)", app_name,
        vcm->workers[0].api_client_handle, vcm->workers[0].api_client_handle);
@@ -1358,6 +1364,7 @@ vppcom_app_destroy (void)
 
   vcl_api_detach (current_wrk);
   vcl_worker_cleanup (current_wrk, 0 /* notify vpp */ );
+  vcl_set_worker_index (~0);
 
   vcl_elog_stop (vcm);