From 684fb6e930a278385993504ba28c497d56bcb05e Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Mon, 9 Dec 2019 16:42:50 -0800 Subject: api: pass api and client main to rx thread Type: fix Change-Id: Ib8313e87a89c80045edd897924917a88b98d1937 Signed-off-by: Florin Coras --- src/vlibmemory/memory_client.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/vlibmemory/memory_client.c') diff --git a/src/vlibmemory/memory_client.c b/src/vlibmemory/memory_client.c index f78288ed84b..b5090636a7f 100644 --- a/src/vlibmemory/memory_client.c +++ b/src/vlibmemory/memory_client.c @@ -48,12 +48,24 @@ memory_client_main_t memory_client_main; __thread memory_client_main_t *my_memory_client_main = &memory_client_main; +typedef struct rx_thread_fn_arg +{ + api_main_t *am; + memory_client_main_t *mm; +} rx_thread_fn_arg_t; + static void * rx_thread_fn (void *arg) { + rx_thread_fn_arg_t *a = (rx_thread_fn_arg_t *) arg; + memory_client_main_t *mm; svm_queue_t *q; - memory_client_main_t *mm = vlibapi_get_memory_client_main (); + vlibapi_set_main (a->am); + vlibapi_set_memory_client_main (a->mm); + clib_mem_free (a); + + mm = vlibapi_get_memory_client_main (); q = vlibapi_get_main ()->vl_input_queue; /* So we can make the rx thread terminate cleanly */ @@ -419,6 +431,15 @@ connect_to_vlib_internal (const char *svm_name, if (thread_fn) { + if (thread_fn == rx_thread_fn) + { + rx_thread_fn_arg_t *arg; + arg = clib_mem_alloc (sizeof (*arg)); + arg->am = vlibapi_get_main (); + arg->mm = vlibapi_get_memory_client_main (); + thread_fn_arg = (void *) arg; + } + rv = pthread_create (&mm->rx_thread_handle, NULL /*attr */ , thread_fn, thread_fn_arg); if (rv) -- cgit 1.2.3-korg