Skip to content

Commit 6f058e9

Browse files
committed
AtomicMarkableReference: address PR comments
1 parent 3452a36 commit 6f058e9

File tree

2 files changed

+8
-14
lines changed

2 files changed

+8
-14
lines changed

lib/concurrent/atomic/atomic_markable_reference.rb

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
module Edge
2-
module Concurrent
1+
module Concurrent
2+
module Edge
33
# @!macro atomic_markable_reference
44
class AtomicMarkableReference < ::Concurrent::Synchronization::Object
5-
# TODO: Remove once out of edge module
6-
include ::Concurrent
7-
85
# @!macro [attach] atomic_markable_reference_method_initialize
96
def initialize(value = nil, mark = false)
107
super
@@ -85,9 +82,7 @@ def mark
8582
#
8683
# @return [ImmutableArray] both the new value and the new mark
8784
def set(new_val, new_mark)
88-
ImmutableArray[new_val, new_mark].tap do |pair|
89-
@Reference.set pair
90-
end
85+
@Reference.set ImmutableArray[new_val, new_mark]
9186
end
9287

9388
# @!macro [attach] atomic_markable_reference_method_update
@@ -104,7 +99,7 @@ def set(new_val, new_mark)
10499
# @return [ImmutableArray] the new value and new mark
105100
def update
106101
loop do
107-
old_val, old_mark = value, marked?
102+
old_val, old_mark = @Reference.get
108103
new_val, new_mark = yield old_val, old_mark
109104

110105
if compare_and_set old_val, new_val, old_mark, new_mark
@@ -128,7 +123,7 @@ def update
128123
#
129124
# @raise [Concurrent::ConcurrentUpdateError] if the update fails
130125
def try_update
131-
old_val, old_mark = value, marked?
126+
old_val, old_mark = @Reference.get
132127
new_val, new_mark = yield old_val, old_mark
133128

134129
unless compare_and_set old_val, new_val, old_mark, new_mark

spec/concurrent/atomic/atomic_markable_reference_spec.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
# Concurrent::AtomicMarkableReference;w
21
shared_examples :atomic_markable_reference do
32
# use a number outside JRuby's fixnum cache range, to ensure identity is
43
# preserved
5-
let(:atomic) { Edge::Concurrent::AtomicMarkableReference.new 1000, true }
4+
let(:atomic) { Concurrent::Edge::AtomicMarkableReference.new 1000, true }
65

76
specify :test_construct do
87
expect(atomic.value).to eq 1000
@@ -87,8 +86,8 @@
8786
end
8887

8988
# Specs for platform specific implementations
90-
module Edge
91-
module Concurrent
89+
module Concurrent
90+
module Edge
9291
describe AtomicMarkableReference do
9392
it_should_behave_like :atomic_markable_reference
9493
end

0 commit comments

Comments
 (0)