X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlibmemory%2Fmemory_api.c;h=a444ec785a76f8478cb1167fa2d7af7152ddc115;hb=b7b929931a07fbb27b43d5cd105f366c3e29807e;hp=1da77c5b29bc8b0e63a8daf464ef6eb5cd0d2464;hpb=1f806587d8e1d94ee7630cee134fbaae2de2f31e;p=vpp.git diff --git a/src/vlibmemory/memory_api.c b/src/vlibmemory/memory_api.c index 1da77c5b29b..a444ec785a7 100644 --- a/src/vlibmemory/memory_api.c +++ b/src/vlibmemory/memory_api.c @@ -127,7 +127,7 @@ vl_api_memclnt_create_internal (char *name, svm_queue_t * q) *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; @@ -157,6 +157,7 @@ vl_api_memclnt_create_t_handler (vl_api_memclnt_create_t * mp) int rv = 0; void *oldheap; api_main_t *am = &api_main; + u8 *msg_table; /* * This is tortured. Maintain a vlib-address-space private @@ -193,7 +194,7 @@ vl_api_memclnt_create_t_handler (vl_api_memclnt_create_t * mp) *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; @@ -209,6 +210,11 @@ vl_api_memclnt_create_t_handler (vl_api_memclnt_create_t * mp) am->serialized_message_table_in_shmem = vl_api_serialize_message_table (am, 0); + if (am->vlib_rp != am->vlib_primary_rp) + msg_table = vl_api_serialize_message_table (am, 0); + else + msg_table = am->serialized_message_table_in_shmem; + pthread_mutex_unlock (&svm->mutex); svm_pop_heap (oldheap); @@ -220,8 +226,7 @@ vl_api_memclnt_create_t_handler (vl_api_memclnt_create_t * mp) am->shmem_hdr->application_restarts); rp->context = mp->context; rp->response = ntohl (rv); - rp->message_table = - pointer_to_uword (am->serialized_message_table_in_shmem); + rp->message_table = pointer_to_uword (msg_table); vl_msg_api_send_shmem (q, (u8 *) & rp); } @@ -341,7 +346,7 @@ vl_api_memclnt_delete_t_handler (vl_api_memclnt_delete_t * mp) oldheap = svm_push_data_heap (svm); vec_free (regp->name); /* Poison the old registration */ - memset (regp, 0xF1, sizeof (*regp)); + clib_memset (regp, 0xF1, sizeof (*regp)); clib_mem_free (regp); pthread_mutex_unlock (&svm->mutex); svm_pop_heap (oldheap); @@ -395,7 +400,7 @@ vl_api_memclnt_keepalive_t_handler (vl_api_memclnt_keepalive_t * mp) shmem_hdr = am->shmem_hdr; rmp = vl_msg_api_alloc_as_if_client (sizeof (*rmp)); - memset (rmp, 0, sizeof (*rmp)); + clib_memset (rmp, 0, sizeof (*rmp)); rmp->_vl_msg_id = ntohs (VL_API_MEMCLNT_KEEPALIVE_REPLY); rmp->context = mp->context; vl_msg_api_send_shmem (shmem_hdr->vl_input_queue, (u8 *) & rmp); @@ -420,7 +425,7 @@ vl_mem_api_init (const char *region_name) vl_shmem_hdr_t *shm; vlib_main_t *vm = vlib_get_main (); - memset (c, 0, sizeof (*c)); + clib_memset (c, 0, sizeof (*c)); if ((rv = vl_map_shmem (region_name, 1 /* is_vlib */ )) < 0) return rv; @@ -508,7 +513,7 @@ send_memclnt_keepalive (vl_api_registration_t * regp, f64 now) am->shmem_hdr = regp->shmem_hdr; mp = vl_msg_api_alloc (sizeof (*mp)); - memset (mp, 0, sizeof (*mp)); + clib_memset (mp, 0, sizeof (*mp)); mp->_vl_msg_id = clib_host_to_net_u16 (VL_API_MEMCLNT_KEEPALIVE); mp->context = mp->client_index = vl_msg_api_handle_from_index_and_epoch @@ -653,7 +658,7 @@ vl_mem_api_dead_client_scan (api_main_t * am, vl_shmem_hdr_t * shm, f64 now) else { /* Poison the old registration */ - memset (*regpp, 0xF3, sizeof (**regpp)); + clib_memset (*regpp, 0xF3, sizeof (**regpp)); clib_mem_free (*regpp); } /* no dangling references, please */ @@ -894,7 +899,7 @@ vlibmemory_init (vlib_main_t * vm) svm_map_region_args_t _a, *a = &_a; clib_error_t *error; - memset (a, 0, sizeof (*a)); + clib_memset (a, 0, sizeof (*a)); a->root_path = am->root_path; a->name = SVM_GLOBAL_REGION_NAME; a->baseva = (am->global_baseva != 0) ?