session: move add/del segment msg to mq
[vpp.git] / src / vnet / session / application_worker.c
index 0be1a2e..1db6baa 100644 (file)
@@ -109,9 +109,9 @@ app_worker_free (app_worker_t * app_wrk)
        segment_manager_free (sm);
     }
 
-  pool_put (app_workers, app_wrk);
   if (CLIB_DEBUG)
     clib_memset (app_wrk, 0xfe, sizeof (*app_wrk));
+  pool_put (app_workers, app_wrk);
 }
 
 application_t *
@@ -150,7 +150,8 @@ app_worker_alloc_session_fifos (segment_manager_t * sm, session_t * s)
   svm_fifo_t *rx_fifo = 0, *tx_fifo = 0;
   int rv;
 
-  if ((rv = segment_manager_alloc_session_fifos (sm, &rx_fifo, &tx_fifo)))
+  if ((rv = segment_manager_alloc_session_fifos (sm, s->thread_index,
+                                                &rx_fifo, &tx_fifo)))
     return rv;
 
   rx_fifo->master_session_index = s->session_index;
@@ -372,6 +373,15 @@ app_worker_builtin_tx (app_worker_t * app_wrk, session_t * s)
   return 0;
 }
 
+int
+app_worker_migrate_notify (app_worker_t * app_wrk, session_t * s,
+                          session_handle_t new_sh)
+{
+  application_t *app = application_get (app_wrk->app_index);
+  app->cb_fns.session_migrate_callback (s, new_sh);
+  return 0;
+}
+
 int
 app_worker_own_session (app_worker_t * app_wrk, session_t * s)
 {
@@ -516,7 +526,8 @@ int
 app_worker_add_segment_notify (app_worker_t * app_wrk, u64 segment_handle)
 {
   application_t *app = application_get (app_wrk->app_index);
-  return app->cb_fns.add_segment_callback (app_wrk->api_client_index,
+
+  return app->cb_fns.add_segment_callback (app_wrk->wrk_index,
                                           segment_handle);
 }
 
@@ -524,7 +535,7 @@ int
 app_worker_del_segment_notify (app_worker_t * app_wrk, u64 segment_handle)
 {
   application_t *app = application_get (app_wrk->app_index);
-  return app->cb_fns.del_segment_callback (app_wrk->api_client_index,
+  return app->cb_fns.del_segment_callback (app_wrk->wrk_index,
                                           segment_handle);
 }
 
@@ -541,13 +552,15 @@ app_send_io_evt_rx (app_worker_t * app_wrk, session_t * s)
   svm_msg_q_msg_t msg;
   svm_msg_q_t *mq;
 
+  if (app_worker_application_is_builtin (app_wrk))
+    return app_worker_builtin_rx (app_wrk, s);
+
+  /* Make sure the session is in established state within external apps.
+   * Should be removed once we confirm closes to apps */
   if (PREDICT_FALSE (s->session_state != SESSION_STATE_READY
                     && s->session_state != SESSION_STATE_LISTENING))
     return 0;
 
-  if (app_worker_application_is_builtin (app_wrk))
-    return app_worker_builtin_rx (app_wrk, s);
-
   if (svm_fifo_has_event (s->rx_fifo))
     return 0;