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 376 376: def timed_wait(mutex, secs) 377: if secs > 100000000 378: # NOTE: If one calls timeout() on FreeBSD 5 with an 379: # argument of more than 100000000, then MRI will become 380: # stuck in an infite loop, blocking all threads. It seems 381: # that MRI uses select() to implement sleeping. 382: # I think that a value of more than 100000000 overflows 383: # select()'s data structures, causing it to behave incorrectly. 384: # So we just make sure we can't sleep more than 100000000 385: # seconds. 386: secs = 100000000 387: end 388: if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby" 389: if secs > 0 390: return wait(mutex, secs) 391: else 392: return wait(mutex) 393: end 394: else 395: require 'timeout' unless defined?(Timeout) 396: if secs > 0 397: Timeout.timeout(secs) do 398: wait(mutex) 399: end 400: else 401: wait(mutex) 402: end 403: return true 404: end 405: rescue Timeout::Error 406: return false 407: 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 411 411: def timed_wait!(mutex, secs) 412: require 'timeout' unless defined?(Timeout) 413: if secs > 100000000 414: # See the corresponding note for timed_wait(). 415: secs = 100000000 416: end 417: if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby" 418: if secs > 0 419: if !wait(mutex, secs) 420: raise Timeout::Error, "Timeout" 421: end 422: else 423: wait(mutex) 424: end 425: else 426: if secs > 0 427: Timeout.timeout(secs) do 428: wait(mutex) 429: end 430: else 431: wait(mutex) 432: end 433: end 434: return nil 435: end