Fix potential bad optimization bug in sync.Ticket_Mutex
When locking, we were not loading m.serving atomically and so the optimizer could have hoisted the check out of the loop, thus resulting in an infinite loop.
This commit is contained in:
1 parent
2c91c21021
commit
3afa2736b7
1 file changed
+1
-1
+1
-1
@@ -17,7 +17,7 @@ ticket_mutex_init :: proc(m: ^Ticket_Mutex) {
|
||||
|
||||
ticket_mutex_lock :: inline proc(m: ^Ticket_Mutex) {
|
||||
ticket := atomic_add(&m.ticket, 1, .Relaxed);
|
||||
for ticket != m.serving {
|
||||
for ticket != atomic_load(&m.serving, .Acquire) {
|
||||
yield_processor();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user