hsa: fix handling active connection failures in the proxy 04/28104/1
authorIvan Shvedunov <ivan4th@gmail.com>
Wed, 29 Jul 2020 16:17:05 +0000 (19:17 +0300)
committerIvan Shvedunov <ivan4th@gmail.com>
Wed, 29 Jul 2020 16:29:40 +0000 (19:29 +0300)
Type: fix

Signed-off-by: Ivan Shvedunov <ivan4th@gmail.com>
Change-Id: I9c62bb6524247e2cd25de198263c16f3d9db0da9

src/plugins/hs_apps/proxy.c

index 6dd3f56..9513fab 100644 (file)
@@ -434,21 +434,28 @@ active_open_connected_callback (u32 app_index, u32 opaque,
   proxy_session_t *ps;
   u8 thread_index = vlib_get_thread_index ();
 
-  if (err)
-    {
-      clib_warning ("connection %d failed!", opaque);
-      ASSERT (0);
-      return 0;
-    }
-
   /*
    * Setup proxy session handle.
    */
   clib_spinlock_lock_if_init (&pm->sessions_lock);
 
   ps = pool_elt_at_index (pm->sessions, opaque);
-  ps->vpp_active_open_handle = session_handle (s);
-  ps->active_open_establishing = 0;
+
+  /* Connection failed */
+  if (err)
+    {
+      vnet_disconnect_args_t _a, *a = &_a;
+
+      a->handle = ps->vpp_server_handle;
+      a->app_index = pm->server_app_index;
+      vnet_disconnect_session (a);
+      ps->po_disconnected = 1;
+    }
+  else
+    {
+      ps->vpp_active_open_handle = session_handle (s);
+      ps->active_open_establishing = 0;
+    }
 
   /* Passive open session was already closed! */
   if (ps->po_disconnected)