vapi: Add option to dispatch with timeout
Type: improvement Change-Id: I606efc90d9b1b8e2a2590a8b4e0021e2508642b2 Signed-off-by: Dau Do <daudo@yahoo.com>
This commit is contained in:
@@ -1792,14 +1792,15 @@ vapi_verify_msg_size (vapi_msg_id_t id, void *buf, uword buf_size)
|
||||
}
|
||||
|
||||
vapi_error_e
|
||||
vapi_dispatch_one (vapi_ctx_t ctx)
|
||||
vapi_dispatch_one_timedwait (vapi_ctx_t ctx, u32 wait_time)
|
||||
{
|
||||
VAPI_DBG ("vapi_dispatch_one()");
|
||||
void *msg;
|
||||
uword size;
|
||||
svm_q_conditional_wait_t cond =
|
||||
vapi_is_nonblocking (ctx) ? SVM_Q_NOWAIT : SVM_Q_WAIT;
|
||||
vapi_error_e rv = vapi_recv (ctx, &msg, &size, cond, 0);
|
||||
vapi_is_nonblocking (ctx) ? (wait_time ? SVM_Q_TIMEDWAIT : SVM_Q_NOWAIT) :
|
||||
SVM_Q_WAIT;
|
||||
vapi_error_e rv = vapi_recv (ctx, &msg, &size, cond, wait_time);
|
||||
if (VAPI_OK != rv)
|
||||
{
|
||||
VAPI_DBG ("vapi_recv failed with rv=%d", rv);
|
||||
@@ -1846,6 +1847,12 @@ done:
|
||||
return rv;
|
||||
}
|
||||
|
||||
vapi_error_e
|
||||
vapi_dispatch_one (vapi_ctx_t ctx)
|
||||
{
|
||||
return vapi_dispatch_one_timedwait (ctx, 0);
|
||||
}
|
||||
|
||||
vapi_error_e
|
||||
vapi_dispatch (vapi_ctx_t ctx)
|
||||
{
|
||||
|
@@ -222,6 +222,18 @@ vapi_error_e vapi_recv (vapi_ctx_t ctx, void **msg, size_t *msg_size,
|
||||
*/
|
||||
vapi_error_e vapi_wait (vapi_ctx_t ctx);
|
||||
|
||||
/**
|
||||
* @brief pick next message sent by vpp and call the appropriate callback
|
||||
*
|
||||
* @note if using block mode, it will be blocked indefinitely until the next
|
||||
* msg available. If using non-blocking mode, it will block for time_wait
|
||||
* seconds until the next msg available if time_wait > 0, or does not block if
|
||||
* time_wait == 0.
|
||||
*
|
||||
* @return VAPI_OK on success, other error code on error
|
||||
*/
|
||||
vapi_error_e vapi_dispatch_one_timedwait (vapi_ctx_t ctx, u32 wait_time);
|
||||
|
||||
/**
|
||||
* @brief pick next message sent by vpp and call the appropriate callback
|
||||
*
|
||||
@@ -235,11 +247,11 @@ vapi_error_e vapi_dispatch_one (vapi_ctx_t ctx);
|
||||
*
|
||||
* @note the dispatch loop is interrupted if any error is encountered or
|
||||
* returned from the callback, in which case this error is returned as the
|
||||
* result of vapi_dispatch. In this case it might be necessary to call dispatch
|
||||
* again to process the remaining messages. Returning VAPI_EUSER from
|
||||
* a callback allows the user to break the dispatch loop (and distinguish
|
||||
* this case in the calling code from other failures). VAPI never returns
|
||||
* VAPI_EUSER on its own.
|
||||
* result of vapi_dispatch. In this case it might be necessary to call
|
||||
* dispatch again to process the remaining messages. Returning VAPI_EUSER
|
||||
* from a callback allows the user to break the dispatch loop (and
|
||||
* distinguish this case in the calling code from other failures). VAPI never
|
||||
* returns VAPI_EUSER on its own.
|
||||
*
|
||||
* @return VAPI_OK on success, other error code on error
|
||||
*/
|
||||
|
Reference in New Issue
Block a user