[PATCH v1 4/5] eal: fix async IPC resource leaks on partial failure

Thomas Monjalon thomas at monjalon.net
Thu May 28 16:24:38 CEST 2026


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);





More information about the dev mailing list