You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When async_context_threadsafe_background_execute_sync() is invoked from the non‑owner core, the helper worker used to be queued as a async_when_pending_worker_t.
Under heavy IRQ load the “pending” flag could be lost, leaving the semaphore unreleased and the caller blocked indefinitely (issue earlephilhower#2433).
Changes
Replace the helper’s worker field with async_at_time_worker_t and adapt handle_sync_func_call() accordingly.
Queue the helper via async_context_add_at_time_worker_in_ms(..., 0) instead of the previous add_when_pending_worker/set_work_pending pair.
Drop the now‑unnecessary async_context_remove_when_pending_worker() call inside the handler; at‑time workers self‑remove after execution.
.gitignore: ignore .qodo workspace directory.
Impact
The execute‑sync path is now race‑free: the helper worker is guaranteed to run once, release the semaphore, and return the result to the caller, eliminating the sporadic deadlock observed in multicore scenarios.
Co‑authored‑by: Goran Miskovic <schkovich@users.noreply.github.com> Fix contributed for raspberrypi/pico-sdk/issues/2433
0 commit comments