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 @waiters.push(Thread.current)
18 elapsed = mutex.sleep timeout if timeout > 0.0
19 unless timeout > 0.0 and elapsed < timeout
20 t = @waiters_mutex.synchronize { @waiters.delete Thread.current }
21 signal unless t # if we got notified, pass it along
22 raise TimeoutError, "wait timed out"
37 class ConditionVariable
39 def wait(timeout = nil)
41 # raise NotImplementedError, "timeout is not implemented yet"
43 @monitor.__send__(:mon_check_owner)
44 count = @monitor.__send__(:mon_exit_for_cond)
46 @cond.wait(@monitor.instance_variable_get("@mon_mutex"), timeout)
51 @monitor.__send__(:mon_enter_for_cond, count)
56 @monitor.__send__(:mon_check_owner)
61 @monitor.__send__(:mon_check_owner)
65 end # ConditionVariable
67 def self.extend_object(obj)
69 obj.__send__(:mon_initialize)