4 # :title: ruby 1.9 compatibility (monkey)patches
9 class ConditionVariable
11 def wait(mutex, timeout=nil)
13 # TODO: mutex should not be used
14 @waiters_mutex.synchronize do
15 if @waiters.instance_of? Hash # ruby 2.0.0?
16 @waiters[Thread.current] = true
18 @waiters.push(Thread.current)
22 elapsed = mutex.sleep timeout if timeout > 0.0
23 unless timeout > 0.0 and elapsed < timeout
24 t = @waiters_mutex.synchronize { @waiters.delete Thread.current }
25 signal unless t # if we got notified, pass it along
26 raise TimeoutError, "wait timed out"
41 class ConditionVariable
43 def wait(timeout = nil)
45 # raise NotImplementedError, "timeout is not implemented yet"
47 @monitor.__send__(:mon_check_owner)
48 count = @monitor.__send__(:mon_exit_for_cond)
50 @cond.wait(@monitor.instance_variable_get("@mon_mutex"), timeout)
55 @monitor.__send__(:mon_enter_for_cond, count)
60 @monitor.__send__(:mon_check_owner)
65 @monitor.__send__(:mon_check_owner)
69 end # ConditionVariable
71 def self.extend_object(obj)
73 obj.__send__(:mon_initialize)