regp->clib_file_index = am->shmem_hdr->clib_file_index;
q = regp->vl_input_queue = (svm_queue_t *) (uword) mp->input_queue;
+ VL_MSG_API_SVM_QUEUE_UNPOISON (q);
regp->name = format (0, "%s", mp->name);
vec_add1 (regp->name, 0);
}
}
+ /* No dangling references, please */
+ *regpp = 0;
+
/* For horizontal scaling, add a hash table... */
for (i = 0; i < vec_len (am->vlib_private_rps); i++)
{
}
}
- /* No dangling references, please */
- *regpp = 0;
-
if (private_registration == 0)
{
pool_put_index (am->vl_clients,
vl_msg_api_send_shmem (shmem_hdr->vl_input_queue, (u8 *) & rmp);
}
+/*
+ * To avoid filling the API trace buffer with boring messages,
+ * don't trace memclnt_keepalive[_reply] msgs
+ */
+
#define foreach_vlib_api_msg \
-_(MEMCLNT_CREATE, memclnt_create) \
-_(MEMCLNT_DELETE, memclnt_delete) \
-_(MEMCLNT_KEEPALIVE, memclnt_keepalive) \
-_(MEMCLNT_KEEPALIVE_REPLY, memclnt_keepalive_reply) \
+_(MEMCLNT_CREATE, memclnt_create, 1) \
+_(MEMCLNT_DELETE, memclnt_delete, 1) \
+_(MEMCLNT_KEEPALIVE, memclnt_keepalive, 0) \
+_(MEMCLNT_KEEPALIVE_REPLY, memclnt_keepalive_reply, 0)
/*
* memory_api_init
if ((rv = vl_map_shmem (region_name, 1 /* is_vlib */ )) < 0)
return rv;
-#define _(N,n) do { \
+#define _(N,n,t) do { \
c->id = VL_API_##N; \
c->name = #n; \
c->handler = vl_api_##n##_t_handler; \
c->endian = vl_api_##n##_t_endian; \
c->print = vl_api_##n##_t_print; \
c->size = sizeof(vl_api_##n##_t); \
- c->traced = 1; /* trace, so these msgs print */ \
+ c->traced = t; /* trace, so these msgs print */ \
c->replay = 0; /* don't replay client create/delete msgs */ \
c->message_bounce = 0; /* don't bounce this message */ \
vl_msg_api_config(c);} while (0);
vec_delete (am->vlib_private_rps, 1, i);
goto found;
}
+ svm_pop_heap (oldheap);
clib_warning ("private rp %llx AWOL", dead_rp);
+ oldheap = svm_push_data_heap (svm);
found:
/* Kill it, accounting for the memfd header page */
+ svm_pop_heap (oldheap);
if (munmap ((void *) virtual_base, virtual_size) < 0)
clib_unix_warning ("munmap");
/* Reset the queue-length-address cache */
vec_reset_length (vl_api_queue_cursizes);
+ oldheap = svm_push_data_heap (svm);
}
else
{
uword mp;
if (!svm_queue_sub2 (q, (u8 *) & mp))
{
+ VL_MSG_API_UNPOISON ((void *) mp);
vl_msg_api_handler_with_vm_node (am, (void *) mp, vm, node);
return 0;
}