X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fsession_api.c;h=89a30d2626dd37d75b56b595ab2f30719be1682e;hb=e6b83059af3365ab12bbe93655a7dea6f691dbda;hp=15c5812e790800e92c75f05fe1dd5fce3e43a335;hpb=61ae056bdb6cdf7cb718cf9f459d41e903abcb47;p=vpp.git diff --git a/src/vnet/session/session_api.c b/src/vnet/session/session_api.c index 15c5812e790..89a30d2626d 100644 --- a/src/vnet/session/session_api.c +++ b/src/vnet/session/session_api.c @@ -1434,8 +1434,8 @@ sapi_add_del_worker_handler (app_namespace_t * app_ns, app_ns_api_handle_t *handle; app_sapi_msg_t msg = { 0 }; app_worker_t *app_wrk; + u32 sapi_handle = -1; application_t *app; - u32 sapi_handle; u8 fd_flags = 0; app = application_get_if_valid (mp->app_index); @@ -1486,6 +1486,7 @@ done: rmp = &msg.worker_add_del_reply; rmp->retval = rv; rmp->is_add = mp->is_add; + rmp->api_client_handle = sapi_handle; rmp->wrk_index = args.wrk_map_index; rmp->segment_handle = args.segment_handle; if (!rv && mp->is_add) @@ -1507,7 +1508,6 @@ done: static void sapi_socket_detach (app_namespace_t * app_ns, clib_socket_t * cs) { - vnet_app_detach_args_t _a = { 0 }, *a = &_a; app_ns_api_handle_t *handle; app_worker_t *app_wrk; u32 api_client_handle; @@ -1515,12 +1515,19 @@ sapi_socket_detach (app_namespace_t * app_ns, clib_socket_t * cs) api_client_handle = appns_sapi_socket_handle (app_ns, cs); sapi_socket_close_w_handle (api_client_handle); - /* Cleanup everything because app closed socket or crashed */ + /* Cleanup everything because app worker closed socket or crashed */ handle = (app_ns_api_handle_t *) & cs->private_data; app_wrk = app_worker_get (handle->aah_app_wrk_index); - a->app_index = app_wrk->app_index; - a->api_client_index = api_client_handle; - vnet_application_detach (a); + + vnet_app_worker_add_del_args_t args = { + .app_index = app_wrk->app_index, + .wrk_map_index = app_wrk->wrk_map_index, + .api_client_index = api_client_handle, + .is_add = 0 + }; + /* Send rpc to main thread for worker barrier */ + vlib_rpc_call_main_thread (vnet_app_worker_add_del, (u8 *) & args, + sizeof (args)); } static clib_error_t *