From d516ca42d3fcbdc5da9877ab07298f8bb891bff3 Mon Sep 17 00:00:00 2001 From: Nathan Skrzypczak Date: Thu, 1 Aug 2019 18:14:06 +0200 Subject: vppinfra: Expose function setting __os_thread_index Type: feature This is needed when creating pthreads in client applications, they need a way to set __os_thread_index per thread that does not conflict with the binary API thread index. If __os_thread_index is left to 0 in two client pthreads and they call vl_msg_api_alloc and vec_resize at the same time it can fail due to them sharing (and push/poping) the same clib_per_cpu_mheaps slot. Change-Id: I85d4248a39b641a4d3ad5a1c1bd6e0db5875fab6 Signed-off-by: Nathan Skrzypczak --- src/vlibmemory/memory_client.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) (limited to 'src/vlibmemory') diff --git a/src/vlibmemory/memory_client.c b/src/vlibmemory/memory_client.c index d002845a00c..f032ae77d19 100644 --- a/src/vlibmemory/memory_client.c +++ b/src/vlibmemory/memory_client.c @@ -63,7 +63,6 @@ rx_thread_fn (void *arg) svm_queue_t *q; memory_client_main_t *mm = &memory_client_main; api_main_t *am = &api_main; - int i; q = am->vl_input_queue; @@ -71,25 +70,7 @@ rx_thread_fn (void *arg) if (setjmp (mm->rx_thread_jmpbuf) == 0) { mm->rx_thread_jmpbuf_valid = 1; - /* - * Find an unused slot in the per-cpu-mheaps array, - * and grab it for this thread. We need to be able to - * push/pop the thread heap without affecting other thread(s). - */ - if (__os_thread_index == 0) - { - for (i = 0; i < ARRAY_LEN (clib_per_cpu_mheaps); i++) - { - if (clib_per_cpu_mheaps[i] == 0) - { - /* Copy the main thread mheap pointer */ - clib_per_cpu_mheaps[i] = clib_per_cpu_mheaps[0]; - __os_thread_index = i; - break; - } - } - ASSERT (__os_thread_index > 0); - } + clib_mem_set_thread_index (); while (1) vl_msg_api_queue_handler (q); } -- cgit 1.2.3-korg