In original implementation, timeout event for an async request will be ignored. As a result, an async request will never trigger the action if it cannot receive any reply any more.
We fix this by counting timeout as a processed reply. Fixes: f05e26051c15 ("eal: add IPC asynchronous request") Signed-off-by: Jianfeng Tan <jianfeng....@intel.com> Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com> Acked-by: Anatoly Burakov <anatoly.bura...@intel.com> --- lib/librte_eal/common/eal_common_proc.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c index f8cb0e8..9136fb0 100644 --- a/lib/librte_eal/common/eal_common_proc.c +++ b/lib/librte_eal/common/eal_common_proc.c @@ -419,7 +419,13 @@ process_async_request(struct pending_request *sr, const struct timespec *now) } else if (sr->reply_received == -1) { /* we were asked to ignore this process */ reply->nb_sent--; + } else if (timeout) { + /* count it as processed response, but don't increment + * nb_received. + */ + param->n_responses_processed++; } + free(sr->reply); last_msg = param->n_responses_processed == reply->nb_sent; -- 2.7.4