vcl: fix disconnect from binary api 73/23973/2
authorFlorin Coras <fcoras@cisco.com>
Thu, 12 Dec 2019 20:01:24 +0000 (12:01 -0800)
committerFlorin Coras <fcoras@cisco.com>
Thu, 12 Dec 2019 20:06:16 +0000 (12:06 -0800)
Type: fix

Change-Id: I4398d26879b5efd932fa1d9ae232aa918ec736d6
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vcl/vcl_bapi.c
src/vcl/vcl_private.c
src/vcl/vppcom.c
src/vlibmemory/memory_client.c

index 194c136..b91e928 100644 (file)
@@ -567,10 +567,11 @@ vppcom_connect_to_vpp (char *app_name)
 void
 vppcom_disconnect_from_vpp (void)
 {
+  vcl_worker_t *wrk = vcl_worker_get_current ();
   vppcom_cfg_t *vcl_cfg = &vcm->cfg;
 
   if (vcl_cfg->vpp_api_socket_name)
-    vl_socket_client_disconnect ();
+    vl_socket_client_disconnect2 (&wrk->bapi_sock_ctx);
   else
     vl_client_disconnect_from_vlib ();
 }
index b14fdee..6e887c8 100644 (file)
@@ -158,11 +158,19 @@ vcl_worker_cleanup (vcl_worker_t * wrk, u8 notify_vpp)
   clib_spinlock_lock (&vcm->workers_lock);
   if (notify_vpp)
     {
+      /* Notify vpp that the worker is going away */
       if (wrk->wrk_index == vcl_get_worker_index ())
        vcl_send_app_worker_add_del (0 /* is_add */ );
       else
        vcl_send_child_worker_del (wrk);
+
+      /* Disconnect the binary api */
+      if (vec_len (vcm->workers) == 1)
+       vppcom_disconnect_from_vpp ();
+      else
+       vl_client_send_disconnect (1 /* vpp should cleanup */ );
     }
+
   if (wrk->mqs_epfd > 0)
     close (wrk->mqs_epfd);
   hash_free (wrk->session_index_by_vpp_handles);
index ce47766..d9a227d 100644 (file)
@@ -1015,10 +1015,6 @@ vppcom_app_exit (void)
   vcl_worker_cleanup (vcl_worker_get_current (), 1 /* notify vpp */ );
   vcl_set_worker_index (~0);
   vcl_elog_stop (vcm);
-  if (vec_len (vcm->workers) == 1)
-    vppcom_disconnect_from_vpp ();
-  else
-    vl_client_send_disconnect (1 /* vpp should cleanup */ );
 }
 
 /*
index bd89526..c6bfb6f 100644 (file)
@@ -395,7 +395,7 @@ vl_client_api_unmap (void)
 u8
 vl_mem_client_is_connected (void)
 {
-  return (memory_client_main.connected_to_vlib != 0);
+  return (my_memory_client_main->connected_to_vlib != 0);
 }
 
 static int