X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp%2Fapi%2Fapi_main.c;h=1d16f78ea88fee3c70f3ec8db11f040427104216;hb=7c0eb56f4;hp=0e05d3ed78eca2dd24aa52c8dbf6b2b02cb37b3d;hpb=7055e26952e0dee3a01422e9ae733f8996e81608;p=vpp.git diff --git a/src/vpp/api/api_main.c b/src/vpp/api/api_main.c index 0e05d3ed78e..1d16f78ea88 100644 --- a/src/vpp/api/api_main.c +++ b/src/vpp/api/api_main.c @@ -59,7 +59,7 @@ api_main_init (vlib_main_t * vm) return 0; } -VLIB_INIT_FUNCTION (api_main_init); +VLIB_MAIN_LOOP_ENTER_FUNCTION (api_main_init); void vat_plugin_hash_create (void) @@ -76,26 +76,23 @@ maybe_register_api_client (vat_main_t * vam) { vl_api_registration_t **regpp; vl_api_registration_t *regp; - svm_region_t *svm; void *oldheap; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); if (vam->my_client_index != ~0) return; pool_get (am->vl_clients, regpp); - svm = am->vlib_rp; + oldheap = vl_msg_push_heap (); - pthread_mutex_lock (&svm->mutex); - oldheap = svm_push_data_heap (svm); *regpp = clib_mem_alloc (sizeof (vl_api_registration_t)); regp = *regpp; - memset (regp, 0, sizeof (*regp)); + clib_memset (regp, 0, sizeof (*regp)); regp->registration_type = REGISTRATION_TYPE_SHMEM; regp->vl_api_registration_pool_index = regpp - am->vl_clients; - regp->vlib_rp = svm; + regp->vlib_rp = am->vlib_rp; regp->shmem_hdr = am->shmem_hdr; /* Loopback connection */ @@ -104,8 +101,7 @@ maybe_register_api_client (vat_main_t * vam) regp->name = format (0, "%s", "vpp-internal"); vec_add1 (regp->name, 0); - pthread_mutex_unlock (&svm->mutex); - svm_pop_heap (oldheap); + vl_msg_pop_heap (oldheap); vam->my_client_index = vl_msg_api_handle_from_index_and_epoch (regp->vl_api_registration_pool_index, @@ -127,7 +123,6 @@ api_command_fn (vlib_main_t * vm, u32 arg_len; int rv; int (*fp) (vat_main_t *); - api_main_t *am = &api_main; maybe_register_api_client (vam); @@ -229,6 +224,7 @@ VLIB_CLI_COMMAND (api_command, static) = .path = "binary-api", .short_help = "binary-api [help] []", .function = api_command_fn, + .is_mp_safe = 1, }; /* *INDENT-ON* */ @@ -260,7 +256,7 @@ api_cli_output (void *notused, const char *fmt, ...) u16 vl_client_get_first_plugin_msg_id (const char *plugin_name) { - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); vl_api_msg_range_t *rp; uword *p; @@ -277,6 +273,7 @@ uword unformat_sw_if_index (unformat_input_t * input, va_list * args) { void *vam_unused = va_arg (*args, void *); + (void) (vam_unused); u32 *result = va_arg (*args, u32 *); vnet_main_t *vnm = vnet_get_main (); u32 sw_if_index = ~0;