Browse Source

Fix `recursive_benaphore_try_lock`

Previously, if the owner called this, it would fail.
Feoramund 11 months ago
parent
commit
b2c2235e58
1 changed files with 4 additions and 4 deletions
  1. 4 4
      core/sync/extended.odin

+ 4 - 4
core/sync/extended.odin

@@ -474,10 +474,10 @@ recursive_benaphore_try_lock :: proc "contextless" (b: ^Recursive_Benaphore) ->
 	tid := current_thread_id()
 	tid := current_thread_id()
 	if b.owner == tid {
 	if b.owner == tid {
 		atomic_add_explicit(&b.counter, 1, .Acquire)
 		atomic_add_explicit(&b.counter, 1, .Acquire)
-	}
-
-	if v, _ := atomic_compare_exchange_strong_explicit(&b.counter, 0, 1, .Acquire, .Acquire); v != 0 {
-		return false
+	} else {
+		if v, _ := atomic_compare_exchange_strong_explicit(&b.counter, 0, 1, .Acquire, .Acquire); v != 0 {
+			return false
+		}
 	}
 	}
 	// inside the lock
 	// inside the lock
 	b.owner = tid
 	b.owner = tid