Methods
Public Instance methods
This is like ConditionVariable.wait(), but allows one to wait a maximum amount of time. Returns true if this condition was signaled, false if a timeout occurred.
[ show source ]
# File lib/phusion_passenger/utils.rb, line 877 877: def timed_wait(mutex, secs) 878: ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby" 879: if secs > 100000000 880: # NOTE: If one calls timeout() on FreeBSD 5 with an 881: # argument of more than 100000000, then MRI will become 882: # stuck in an infite loop, blocking all threads. It seems 883: # that MRI uses select() to implement sleeping. 884: # I think that a value of more than 100000000 overflows 885: # select()'s data structures, causing it to behave incorrectly. 886: # So we just make sure we can't sleep more than 100000000 887: # seconds. 888: secs = 100000000 889: end 890: if ruby_engine == "jruby" 891: if secs > 0 892: return wait(mutex, secs) 893: else 894: return wait(mutex) 895: end 896: elsif RUBY_VERSION >= '1.9.2' 897: if secs > 0 898: t1 = Time.now 899: wait(mutex, secs) 900: t2 = Time.now 901: return t2.to_f - t1.to_f < secs 902: else 903: wait(mutex) 904: return true 905: end 906: else 907: if secs > 0 908: Timeout.timeout(secs) do 909: wait(mutex) 910: end 911: else 912: wait(mutex) 913: end 914: return true 915: end 916: rescue Timeout::Error 917: return false 918: end
This is like ConditionVariable.wait(), but allows one to wait a maximum amount of time. Raises Timeout::Error if the timeout has elapsed.
[ show source ]
# File lib/phusion_passenger/utils.rb, line 922 922: def timed_wait!(mutex, secs) 923: ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby" 924: if secs > 100000000 925: # See the corresponding note for timed_wait(). 926: secs = 100000000 927: end 928: if ruby_engine == "jruby" 929: if secs > 0 930: if !wait(mutex, secs) 931: raise Timeout::Error, "Timeout" 932: end 933: else 934: wait(mutex) 935: end 936: elsif RUBY_VERSION >= '1.9.2' 937: if secs > 0 938: t1 = Time.now 939: wait(mutex, secs) 940: t2 = Time.now 941: if t2.to_f - t1.to_f >= secs 942: raise Timeout::Error, "Timeout" 943: end 944: else 945: wait(mutex) 946: end 947: else 948: if secs > 0 949: Timeout.timeout(secs) do 950: wait(mutex) 951: end 952: else 953: wait(mutex) 954: end 955: end 956: return nil 957: end