vcl: support for eventfd mq signaling
- support eventfd based mq signaling. Based on configuration, vcl
epoll/select can use either condvars or epoll on mq eventfds.
- add vcl support for memfd segments
- vpp explicitly registers cut-through segments with apps/vcl
- if using eventfd, make ldp allow one call to libc_epoll_create. Needed
for the message queue epfd
- update svm_queue_t to allow blocking calls with eventfd signaling.
Change-Id: I064151ac370bbe29bb16c968bf4e3659c8286bea
Signed-off-by: Florin Coras <fcoras@cisco.com>
diff --git a/src/vnet/session/application_interface.c b/src/vnet/session/application_interface.c
index c8fa37f..524e7b5 100644
--- a/src/vnet/session/application_interface.c
+++ b/src/vnet/session/application_interface.c
@@ -475,7 +475,7 @@
a->session_cb_vft)))
return clib_error_return_code (0, rv, 0, "app init: %d", rv);
- a->app_event_queue_address = pointer_to_uword (app->event_queue);
+ a->app_evt_q = app->event_queue;
sm = segment_manager_get (app->first_segment_manager);
fs = segment_manager_get_segment_w_lock (sm, 0);
@@ -569,7 +569,18 @@
if (session_handle_is_local (a->handle))
{
local_session_t *ls;
- ls = application_get_local_session_from_handle (a->handle);
+
+ /* Disconnect reply came to worker 1 not main thread */
+ if (vlib_get_thread_index () == 1)
+ {
+ vlib_rpc_call_main_thread (vnet_disconnect_session, (u8 *) a,
+ sizeof (*a));
+ return 0;
+ }
+
+ if (!(ls = application_get_local_session_from_handle (a->handle)))
+ return 0;
+
if (ls->app_index != a->app_index && ls->client_index != a->app_index)
{
clib_warning ("app %u is neither client nor server for session %u",