Skip to content

Commit 2e2a464

Browse files
committed
Support 1.9.3 Ruby
1 parent d4a21ea commit 2e2a464

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

lib/concurrent/synchronized_object.rb

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def ns_wait_until(timeout, &condition)
6161
if timeout
6262
wait_until = Concurrent.monotonic_time + timeout
6363
while true
64-
now = Concurrent.monotonic_time
64+
now = Concurrent.monotonic_time
6565
condition_result = condition.call
6666
return condition_result if now >= wait_until || condition_result
6767
ns_wait wait_until - now
@@ -122,15 +122,15 @@ def ns_signal
122122

123123
class RubySynchronizedObject < AbstractSynchronizedObject
124124
def initialize
125-
@__mutex__do_not_use_directly = Mutex.new
125+
@__lock__do_not_use_directly = Mutex.new
126126
@__condition__do_not_use_directly = ConditionVariable.new
127127
end
128128

129129
def synchronize
130-
if @__mutex__do_not_use_directly.owned?
130+
if @__lock__do_not_use_directly.owned?
131131
yield
132132
else
133-
@__mutex__do_not_use_directly.synchronize { yield }
133+
@__lock__do_not_use_directly.synchronize { yield }
134134
end
135135
end
136136

@@ -145,16 +145,36 @@ def ns_broadcast
145145
end
146146

147147
def ns_wait(timeout)
148-
@__condition__do_not_use_directly.wait @__mutex__do_not_use_directly, timeout
148+
@__condition__do_not_use_directly.wait @__lock__do_not_use_directly, timeout
149+
end
150+
end
151+
152+
class Ruby19SynchronizedObject < RubySynchronizedObject
153+
def initialize
154+
@__lock__do_not_use_directly = Monitor.new
155+
@__condition__do_not_use_directly = @__lock__do_not_use_directly.new_cond
156+
end
157+
158+
def synchronize
159+
@__lock__do_not_use_directly.synchronize { yield }
160+
end
161+
162+
private
163+
164+
def ns_wait(timeout)
165+
@__condition__do_not_use_directly.wait timeout
149166
end
150167
end
151168

152169
# TODO add rbx implementation
153170
SynchronizedObject = Class.new case
154171
when Concurrent.on_jruby?
155172
JavaSynchronizedObject
173+
when Concurrent.on_cruby? && (RUBY_VERSION.split('.').map(&:to_i) <=> [1, 9, 3]) >= 0
174+
Ruby19SynchronizedObject
175+
when Concurrent.on_cruby?
176+
RubySynchronizedObject
156177
else
157178
RubySynchronizedObject
158179
end
159-
160180
end

0 commit comments

Comments
 (0)