Hello Anatoly,

19/03/2026 17:07, Anatoly Burakov:
> Use a numeric request ID for alarm callback lookup so stale callbacks
> from rolled-back requests become harmless no-ops.

It seems you forgot to convert 2 calls to rte_eal_alarm_set().

[...]
>  struct pending_request {
>       TAILQ_ENTRY(pending_request) next;
> +     unsigned long id;
[...]
> +static struct pending_request *
> +find_pending_request_by_id(unsigned long id)
> +{
> +     struct pending_request *r;
> +
> +     TAILQ_FOREACH(r, &pending_requests.requests, next) {
> +             if (r->id == id)
> +                     return r;
> +     }
> +
> +     return NULL;
> +}
[...]
>  async_reply_handle(void *arg)
>  {
>       struct pending_request *req;
> +     /* alarm arg carries the request ID packed into a void * via uintptr_t 
> */

No, that's wrong.
The pointer passed in some rte_eal_alarm_set() from patch 2
is a struct pending_request.

> +     unsigned long id = (uintptr_t)arg;

Either you get the id field from arg,
or you pass dummy->id to rte_eal_alarm_set().

>       pthread_mutex_lock(&pending_requests.lock);
> -     req = async_reply_handle_thread_unsafe(arg);
> +     req = find_pending_request_by_id(id);
> +     if (req != NULL)
> +             req = async_reply_handle_thread_unsafe(req);
>       pthread_mutex_unlock(&pending_requests.lock);



Reply via email to