mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-10-06 09:02:52 +08:00
cond_timedwait() re-waited on a 10 ms wall-clock timeout until either a signal or its virtual timeout arrived. A signal from the caller's own signaler (px4_sem_post, or the unit test's broadcast) that lands while the waiter is between that wall-clock timeout and re-acquiring the mutex finds no waiter and is lost, so the waiter sleeps until its virtual timeout. In lockstep_scheduler_test nothing else advances time and the test hangs; in SITL a posted semaphore can report ETIMEDOUT late. The loop is not needed: the caller holds the mutex until pthread_cond_wait() releases it and set_absolute_time() takes that mutex before broadcasting, so a timeout broadcast cannot be missed. The original signal loss came from the MAX_WAKEUPS cap that the signal_next list already removed. Go back to a single wait and keep the three-phase signaling. Refs #28862 Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Ramon Roche <mrpollo@gmail.com>