From 3ca01eccae528a74fec8b1731f472d41018e5225 Mon Sep 17 00:00:00 2001 From: danicampora Date: Thu, 5 Sep 2024 22:47:38 +0200 Subject: [PATCH] zephyr/mphalport: Make mp_hal_wait_sem() always call k_poll(). Also even in the case of a zero timeout given. Signed-off-by: danicampora --- ports/zephyr/mphalport.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ports/zephyr/mphalport.c b/ports/zephyr/mphalport.c index fa64c4afc9..2c95032843 100644 --- a/ports/zephyr/mphalport.c +++ b/ports/zephyr/mphalport.c @@ -54,15 +54,11 @@ void mp_hal_wait_sem(struct k_sem *sem, uint32_t timeout_ms) { mp_handle_pending(true); MP_THREAD_GIL_EXIT(); k_timeout_t wait; + uint32_t dt = mp_hal_ticks_ms() - t0; if (timeout_ms == (uint32_t)-1) { wait = K_FOREVER; } else { - uint32_t dt = mp_hal_ticks_ms() - t0; - if (dt >= timeout_ms) { - MP_THREAD_GIL_ENTER(); - return; - } - wait = K_MSEC(timeout_ms - dt); + wait = K_MSEC((timeout_ms > dt) ? (timeout_ms - dt) : 0); } k_poll(wait_events, sem ? 2 : 1, wait); if (wait_events[0].state == K_POLL_STATE_SIGNALED) { @@ -73,5 +69,9 @@ void mp_hal_wait_sem(struct k_sem *sem, uint32_t timeout_ms) { MP_THREAD_GIL_ENTER(); return; } + if (dt >= timeout_ms) { + MP_THREAD_GIL_ENTER(); + return; + } } }