diff options
Diffstat (limited to 'src/vlibmemory')
-rw-r--r-- | src/vlibmemory/memory_client.c | 7 | ||||
-rw-r--r-- | src/vlibmemory/memory_client.h | 2 | ||||
-rw-r--r-- | src/vlibmemory/memory_shared.c | 21 | ||||
-rw-r--r-- | src/vlibmemory/memory_shared.h | 1 |
4 files changed, 23 insertions, 8 deletions
diff --git a/src/vlibmemory/memory_client.c b/src/vlibmemory/memory_client.c index 9f533019c87..9c8dcaa9d64 100644 --- a/src/vlibmemory/memory_client.c +++ b/src/vlibmemory/memory_client.c @@ -261,7 +261,7 @@ vl_api_memclnt_delete_reply_t_handler (vl_api_memclnt_delete_reply_t * mp) am->vl_input_queue = 0; } -void +int vl_client_disconnect (void) { vl_api_memclnt_delete_t *mp; @@ -302,7 +302,7 @@ vl_client_disconnect (void) am->my_client_index = ~0; am->my_registration = 0; am->shmem_hdr = 0; - break; + return -1; } if (svm_queue_sub (vl_input_queue, (u8 *) & rp, SVM_Q_NOWAIT, 0) < 0) continue; @@ -317,6 +317,7 @@ vl_client_disconnect (void) vl_msg_api_handler ((void *) rp); break; } + return 0; } /** @@ -376,7 +377,7 @@ vl_client_api_map (const char *region_name) void vl_client_api_unmap (void) { - vl_unmap_shmem (); + vl_unmap_shmem_client (); } u8 diff --git a/src/vlibmemory/memory_client.h b/src/vlibmemory/memory_client.h index 3fcca9e4b89..f2898f30b23 100644 --- a/src/vlibmemory/memory_client.h +++ b/src/vlibmemory/memory_client.h @@ -21,7 +21,7 @@ #include <vlibmemory/memory_shared.h> int vl_client_connect (const char *name, int ctx_quota, int input_queue_size); -void vl_client_disconnect (void); +int vl_client_disconnect (void); int vl_client_api_map (const char *region_name); void vl_client_api_unmap (void); void vl_client_disconnect_from_vlib (void); diff --git a/src/vlibmemory/memory_shared.c b/src/vlibmemory/memory_shared.c index 488a302bbba..c8c071f9a45 100644 --- a/src/vlibmemory/memory_shared.c +++ b/src/vlibmemory/memory_shared.c @@ -663,8 +663,8 @@ vl_register_mapped_shmem_region (svm_region_t * rp) vec_add1 (am->mapped_shmem_regions, rp); } -void -vl_unmap_shmem (void) +static void +vl_unmap_shmem_internal (u8 is_client) { svm_region_t *rp; int i; @@ -676,13 +676,14 @@ vl_unmap_shmem (void) for (i = 0; i < vec_len (am->mapped_shmem_regions); i++) { rp = am->mapped_shmem_regions[i]; - svm_region_unmap (rp); + is_client ? svm_region_unmap_client (rp) : svm_region_unmap (rp); } vec_free (am->mapped_shmem_regions); am->shmem_hdr = 0; - svm_region_exit (); + is_client ? svm_region_exit_client () : svm_region_exit (); + /* $$$ more careful cleanup, valgrind run... */ vec_free (am->msg_handlers); vec_free (am->msg_endian_handlers); @@ -690,6 +691,18 @@ vl_unmap_shmem (void) } void +vl_unmap_shmem (void) +{ + vl_unmap_shmem_internal (0); +} + +void +vl_unmap_shmem_client (void) +{ + vl_unmap_shmem_internal (1); +} + +void vl_msg_api_send_shmem (svm_queue_t * q, u8 * elem) { api_main_t *am = &api_main; diff --git a/src/vlibmemory/memory_shared.h b/src/vlibmemory/memory_shared.h index deaa62166ae..67ead7d2877 100644 --- a/src/vlibmemory/memory_shared.h +++ b/src/vlibmemory/memory_shared.h @@ -117,6 +117,7 @@ void *vl_mem_api_alloc_as_if_client_w_reg (vl_api_registration_t * reg, void vl_msg_api_free (void *a); int vl_map_shmem (const char *region_name, int is_vlib); void vl_unmap_shmem (void); +void vl_unmap_shmem_client (void); void vl_register_mapped_shmem_region (svm_region_t * rp); void vl_msg_api_send_shmem (svm_queue_t * q, u8 * elem); void vl_msg_api_send_shmem_nolock (svm_queue_t * q, u8 * elem); |