int rv = 0;
void *oldheap;
api_main_t *am = &api_main;
- u8 *serialized_message_table_in_shmem;
/*
* This is tortured. Maintain a vlib-address-space private
regp->name = format (0, "%s", mp->name);
vec_add1 (regp->name, 0);
- serialized_message_table_in_shmem = vl_api_serialize_message_table (am, 0);
+ if (am->serialized_message_table_in_shmem == 0)
+ am->serialized_message_table_in_shmem =
+ vl_api_serialize_message_table (am, 0);
pthread_mutex_unlock (&svm->mutex);
svm_pop_heap (oldheap);
am->shmem_hdr->application_restarts);
rp->context = mp->context;
rp->response = ntohl (rv);
- rp->message_table = pointer_to_uword (serialized_message_table_in_shmem);
+ rp->message_table =
+ pointer_to_uword (am->serialized_message_table_in_shmem);
vl_msg_api_send_shmem (q, (u8 *) & rp);
}
rmp->api_versions[i].major = htonl (vl->major);
rmp->api_versions[i].minor = htonl (vl->minor);
rmp->api_versions[i].patch = htonl (vl->patch);
- strncpy ((char *) rmp->api_versions[i].name, vl->name, 64);
+ strncpy ((char *) rmp->api_versions[i].name, vl->name, 64 - 1);
}
vl_msg_api_send_shmem (q, (u8 *) & rmp);
if (PREDICT_FALSE (q->head == q->maxsize))
q->head = 0;
pthread_mutex_unlock (&q->mutex);
+
if (need_broadcast)
(void) pthread_cond_broadcast (&q->condvar);
- pthread_mutex_unlock (&q->mutex);
-
vl_msg_api_handler_with_vm_node (am, (void *) mp, vm, node);
}
else