diff options
author | Dave Barach <dave@barachs.net> | 2019-11-27 11:42:13 -0500 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2019-12-10 01:13:05 +0000 |
commit | 39d69112fcec114fde34955ceb41555221d3ba11 (patch) | |
tree | 156f21a0e66bf596b2c1e5184d82c80d99ea0a79 /src/vlibmemory/memory_client.c | |
parent | 6b3f25caff262b536a5449ac5461dd041c92a655 (diff) |
api: multiple connections per process
Type: feature
Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I2272521d6e69edcd385ef684af6dd4eea5eaa953
Diffstat (limited to 'src/vlibmemory/memory_client.c')
-rw-r--r-- | src/vlibmemory/memory_client.c | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/src/vlibmemory/memory_client.c b/src/vlibmemory/memory_client.c index bb377f1b531..f78288ed84b 100644 --- a/src/vlibmemory/memory_client.c +++ b/src/vlibmemory/memory_client.c @@ -24,6 +24,7 @@ #include <vppinfra/serialize.h> #include <vppinfra/hash.h> #include <vlibmemory/memory_client.h> +#include <vlibapi/api_common.h> /* A hack. vl_client_get_first_plugin_msg_id depends on it */ #include <vlibmemory/socket_client.h> @@ -45,15 +46,15 @@ #undef vl_printfun memory_client_main_t memory_client_main; +__thread memory_client_main_t *my_memory_client_main = &memory_client_main; static void * rx_thread_fn (void *arg) { svm_queue_t *q; - memory_client_main_t *mm = &memory_client_main; - api_main_t *am = &api_main; + memory_client_main_t *mm = vlibapi_get_memory_client_main (); - q = am->vl_input_queue; + q = vlibapi_get_main ()->vl_input_queue; /* So we can make the rx thread terminate cleanly */ if (setjmp (mm->rx_thread_jmpbuf) == 0) @@ -69,7 +70,7 @@ rx_thread_fn (void *arg) static void vl_api_rx_thread_exit_t_handler (vl_api_rx_thread_exit_t * mp) { - memory_client_main_t *mm = &memory_client_main; + memory_client_main_t *mm = vlibapi_get_memory_client_main (); if (mm->rx_thread_jmpbuf_valid) longjmp (mm->rx_thread_jmpbuf, 1); } @@ -77,7 +78,7 @@ vl_api_rx_thread_exit_t_handler (vl_api_rx_thread_exit_t * mp) static void vl_api_name_and_crc_free (void) { - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); int i; u8 **keys = 0; hash_pair_t *hp; @@ -108,7 +109,7 @@ static void vl_api_memclnt_create_reply_t_handler (vl_api_memclnt_create_reply_t * mp) { serialize_main_t _sm, *sm = &_sm; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); u8 *tblv; u32 nmsgs; int i; @@ -154,7 +155,7 @@ vl_client_connect (const char *name, int ctx_quota, int input_queue_size) vl_shmem_hdr_t *shmem_hdr; int rv = 0; void *oldheap; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); if (am->my_registration) { @@ -241,7 +242,7 @@ static void vl_api_memclnt_delete_reply_t_handler (vl_api_memclnt_delete_reply_t * mp) { void *oldheap; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); pthread_mutex_lock (&am->vlib_rp->mutex); oldheap = svm_push_data_heap (am->vlib_rp); @@ -259,7 +260,7 @@ vl_client_send_disconnect (u8 do_cleanup) { vl_api_memclnt_delete_t *mp; vl_shmem_hdr_t *shmem_hdr; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); ASSERT (am->vlib_rp); shmem_hdr = am->shmem_hdr; @@ -280,7 +281,7 @@ vl_client_disconnect (void) { vl_api_memclnt_delete_reply_t *rp; svm_queue_t *vl_input_queue; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); time_t begin; vl_input_queue = am->vl_input_queue; @@ -336,7 +337,7 @@ vl_api_memclnt_keepalive_t_handler (vl_api_memclnt_keepalive_t * mp) api_main_t *am; vl_shmem_hdr_t *shmem_hdr; - am = &api_main; + am = vlibapi_get_main (); shmem_hdr = am->shmem_hdr; rmp = vl_msg_api_alloc_as_if_client (sizeof (*rmp)); @@ -395,11 +396,11 @@ static int connect_to_vlib_internal (const char *svm_name, const char *client_name, int rx_queue_size, void *(*thread_fn) (void *), - int do_map) + void *thread_fn_arg, int do_map) { int rv = 0; - memory_client_main_t *mm = &memory_client_main; - api_main_t *am = &api_main; + memory_client_main_t *mm = vlibapi_get_memory_client_main (); + api_main_t *am = vlibapi_get_main (); if (do_map && (rv = vl_client_api_map (svm_name))) { @@ -419,7 +420,7 @@ connect_to_vlib_internal (const char *svm_name, if (thread_fn) { rv = pthread_create (&mm->rx_thread_handle, - NULL /*attr */ , thread_fn, 0); + NULL /*attr */ , thread_fn, thread_fn_arg); if (rv) { clib_warning ("pthread_create returned %d", rv); @@ -440,7 +441,8 @@ vl_client_connect_to_vlib (const char *svm_name, const char *client_name, int rx_queue_size) { return connect_to_vlib_internal (svm_name, client_name, rx_queue_size, - rx_thread_fn, 1 /* do map */ ); + rx_thread_fn, 0 /* thread fn arg */ , + 1 /* do map */ ); } int @@ -450,6 +452,7 @@ vl_client_connect_to_vlib_no_rx_pthread (const char *svm_name, { return connect_to_vlib_internal (svm_name, client_name, rx_queue_size, 0 /* no rx_thread_fn */ , + 0 /* no thread fn arg */ , 1 /* do map */ ); } @@ -458,7 +461,8 @@ vl_client_connect_to_vlib_no_map (const char *svm_name, const char *client_name, int rx_queue_size) { return connect_to_vlib_internal (svm_name, client_name, rx_queue_size, - rx_thread_fn, 0 /* dont map */ ); + rx_thread_fn, 0 /* no thread fn arg */ , + 0 /* dont map */ ); } int @@ -467,7 +471,8 @@ vl_client_connect_to_vlib_no_rx_pthread_no_map (const char *svm_name, int rx_queue_size) { return connect_to_vlib_internal (svm_name, client_name, rx_queue_size, - 0 /* want pthread */ , + 0 /* no thread_fn */ , + 0 /* no thread fn arg */ , 0 /* dont map */ ); } @@ -475,18 +480,18 @@ int vl_client_connect_to_vlib_thread_fn (const char *svm_name, const char *client_name, int rx_queue_size, - void *(*thread_fn) (void *)) + void *(*thread_fn) (void *), void *arg) { return connect_to_vlib_internal (svm_name, client_name, rx_queue_size, - thread_fn, 1 /* do map */ ); + thread_fn, arg, 1 /* do map */ ); } static void disconnect_from_vlib_internal (u8 do_unmap) { - memory_client_main_t *mm = &memory_client_main; - api_main_t *am = &api_main; + memory_client_main_t *mm = vlibapi_get_memory_client_main (); + api_main_t *am = vlibapi_get_main (); uword junk; if (mm->rx_thread_jmpbuf_valid) @@ -521,7 +526,7 @@ vl_client_disconnect_from_vlib_no_unmap (void) static void vl_api_get_first_msg_id_reply_t_handler (vl_api_get_first_msg_id_reply_t * mp) { - memory_client_main_t *mm = &memory_client_main; + memory_client_main_t *mm = vlibapi_get_memory_client_main (); i32 retval = ntohl (mp->retval); mm->first_msg_id_reply = (retval >= 0) ? ntohs (mp->first_msg_id) : ~0; @@ -532,8 +537,8 @@ u16 vl_client_get_first_plugin_msg_id (const char *plugin_name) { vl_api_get_first_msg_id_t *mp; - api_main_t *am = &api_main; - memory_client_main_t *mm = &memory_client_main; + api_main_t *am = vlibapi_get_main (); + memory_client_main_t *mm = vlibapi_get_memory_client_main (); f64 timeout; void *old_handler; clib_time_t clib_time; |