hsa: detach app on unsuccessful listen
[vpp.git] / src / plugins / hs_apps / http_cli.c
index fec1427..5d4d49c 100644 (file)
@@ -221,7 +221,7 @@ hcs_cli_process (vlib_main_t *vm, vlib_node_runtime_t *rt, vlib_frame_t *f)
       else if (request[i] == ' ')
        {
          /* vlib_cli_input is vector-based, no need for a NULL */
-         _vec_len (request) = i;
+         vec_set_len (request, i);
          break;
        }
       i++;
@@ -269,7 +269,7 @@ alloc_cli_process (hcs_cli_args_t *args)
     {
       n = vlib_get_node (vm, hcm->free_http_cli_process_node_indices[l - 1]);
       vlib_node_set_state (vm, n->index, VLIB_NODE_STATE_POLLING);
-      _vec_len (hcm->free_http_cli_process_node_indices) = l - 1;
+      vec_set_len (hcm->free_http_cli_process_node_indices, l - 1);
     }
   else
     {
@@ -555,6 +555,17 @@ hcs_listen ()
   return rv;
 }
 
+static void
+hcs_detach ()
+{
+  vnet_app_detach_args_t _a, *a = &_a;
+  hcs_main_t *hcm = &hcs_main;
+  a->app_index = hcm->app_index;
+  a->api_client_index = APP_INVALID_INDEX;
+  hcm->app_index = ~0;
+  vnet_application_detach (a);
+}
+
 static int
 hcs_create (vlib_main_t *vm)
 {
@@ -572,6 +583,7 @@ hcs_create (vlib_main_t *vm)
     }
   if (hcs_listen ())
     {
+      hcs_detach ();
       clib_warning ("failed to start listening");
       return -1;
     }