vapi: only wait if queue is empty 83/40983/2
authorMatthew Smith <[email protected]>
Fri, 24 May 2024 19:53:55 +0000 (19:53 +0000)
committerDave Wallace <[email protected]>
Wed, 27 Nov 2024 03:06:33 +0000 (03:06 +0000)
Type: fix
Fixes: 4b9935cd54

In vapi_wait(), check that the queue is empty before waiting. The
condvar is only signaled on addition of the first message.
pthread_cond_wait() will block approximately forever if there are
already messages in the queue.

Change-Id: Ic52befe443509f3c53aa9a872ba62bb05aaac25e
Signed-off-by: Matthew Smith <[email protected]>
src/vpp-api/vapi/vapi.c

index 61801fc..c818ab0 100644 (file)
@@ -1627,7 +1627,8 @@ vapi_wait (vapi_ctx_t ctx)
     return VAPI_ENOTSUP;
 
   svm_queue_lock (ctx->vl_input_queue);
-  svm_queue_wait (ctx->vl_input_queue);
+  if (ctx->vl_input_queue->cursize == 0)
+    svm_queue_wait (ctx->vl_input_queue);
   svm_queue_unlock (ctx->vl_input_queue);
 
   return VAPI_OK;