summaryrefslogtreecommitdiffstats
path: root/src/vlibapi
diff options
context:
space:
mode:
Diffstat (limited to 'src/vlibapi')
-rw-r--r--src/vlibapi/api_common.h2
-rw-r--r--src/vlibapi/api_shared.c20
2 files changed, 18 insertions, 4 deletions
diff --git a/src/vlibapi/api_common.h b/src/vlibapi/api_common.h
index 4d401046174..2105f1bd430 100644
--- a/src/vlibapi/api_common.h
+++ b/src/vlibapi/api_common.h
@@ -201,7 +201,9 @@ void vl_msg_api_set_first_available_msg_id (u16 first_avail);
u16 vl_msg_api_get_msg_ids (const char *name, int n);
u32 vl_msg_api_get_msg_index (u8 * name_and_crc);
void *vl_msg_push_heap (void);
+void *vl_msg_push_heap_w_region (svm_region_t * vlib_rp);
void vl_msg_pop_heap (void *oldheap);
+void vl_msg_pop_heap_w_region (svm_region_t * vlib_rp, void *oldheap);
typedef clib_error_t *(vl_msg_api_init_function_t) (u32 client_index);
diff --git a/src/vlibapi/api_shared.c b/src/vlibapi/api_shared.c
index a553a5b5b95..aba853dc997 100644
--- a/src/vlibapi/api_shared.c
+++ b/src/vlibapi/api_shared.c
@@ -1064,19 +1064,31 @@ vl_msg_api_get_msg_index (u8 * name_and_crc)
}
void *
+vl_msg_push_heap_w_region (svm_region_t * vlib_rp)
+{
+ pthread_mutex_lock (&vlib_rp->mutex);
+ return svm_push_data_heap (vlib_rp);
+}
+
+void *
vl_msg_push_heap (void)
{
api_main_t *am = vlibapi_get_main ();
- pthread_mutex_lock (&am->vlib_rp->mutex);
- return svm_push_data_heap (am->vlib_rp);
+ return vl_msg_push_heap_w_region (am->vlib_rp);
+}
+
+void
+vl_msg_pop_heap_w_region (svm_region_t * vlib_rp, void *oldheap)
+{
+ svm_pop_heap (oldheap);
+ pthread_mutex_unlock (&vlib_rp->mutex);
}
void
vl_msg_pop_heap (void *oldheap)
{
api_main_t *am = vlibapi_get_main ();
- svm_pop_heap (oldheap);
- pthread_mutex_unlock (&am->vlib_rp->mutex);
+ vl_msg_pop_heap_w_region (am->vlib_rp, oldheap);
}
int