Skip to content

Commit 2820916

Browse files
committed
Merge pull request #355 from ruby-concurrency/fix/mutex-atomic-cas
Fixed compare_and_set on MutexAtomicReference.
2 parents 2b868ae + 0ff56ff commit 2820916

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

lib/concurrent/atomic_reference/mutex_atomic.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ def get_and_set(new_value)
4242

4343
# @!macro atomic_reference_method_compare_and_set
4444
def _compare_and_set(old_value, new_value)
45-
return false unless @mutex.try_lock
46-
begin
47-
return false unless @value.equal? old_value
48-
@value = new_value
49-
ensure
50-
@mutex.unlock
45+
@mutex.synchronize do
46+
if @value == old_value
47+
@value = new_value
48+
true
49+
else
50+
false
51+
end
5152
end
52-
true
5353
end
5454
end
5555
end

0 commit comments

Comments
 (0)