When reading vm->pending_rpc_requests in main thread,
the content may be changed by other workers.
Type: fix
Signed-off-by: Xiaoming Jiang <jiangxiaoming@outlook.com>
Change-Id: I27e9d357b5ecec0f97cd8b950019b35f72fc5f76
{
int i;
api_main_t *am = vlibapi_get_main ();
{
int i;
api_main_t *am = vlibapi_get_main ();
if (PREDICT_FALSE (vec_len (vl_api_queue_cursizes) !=
1 + vec_len (am->vlib_private_rps)))
if (PREDICT_FALSE (vec_len (vl_api_queue_cursizes) !=
1 + vec_len (am->vlib_private_rps)))
- if (vec_len (vm->pending_rpc_requests))
+
+ clib_spinlock_lock_if_init (&vm->pending_rpc_lock);
+ have_pending_rpcs = vec_len (vm->pending_rpc_requests) > 0;
+ clib_spinlock_unlock_if_init (&vm->pending_rpc_lock);
+
+ if (have_pending_rpcs)
{
vm->queue_signal_pending = 1;
vm->api_queue_nonempty = 1;
{
vm->queue_signal_pending = 1;
vm->api_queue_nonempty = 1;