From a1435a6a904b2eb2b154a463c5d60f6c1f55abbc Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:51:00 -0400 Subject: [PATCH] Fix deadlock in `Auto_Reset_Event` --- core/sync/extended.odin | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/core/sync/extended.odin b/core/sync/extended.odin index 924ba92a6..0971516a3 100644 --- a/core/sync/extended.odin +++ b/core/sync/extended.odin @@ -228,15 +228,14 @@ thread. */ auto_reset_event_signal :: proc "contextless" (e: ^Auto_Reset_Event) { old_status := atomic_load_explicit(&e.status, .Relaxed) + new_status := old_status + 1 if old_status < 1 else 1 for { - new_status := old_status + 1 if old_status < 1 else 1 if _, ok := atomic_compare_exchange_weak_explicit(&e.status, old_status, new_status, .Release, .Relaxed); ok { break } - - if old_status < 0 { - sema_post(&e.sema) - } + } + if old_status < 0 { + sema_post(&e.sema) } }