Class ConditionVariable
In: lib/phusion_passenger/utils.rb
Parent: Object

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.

[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.

[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

[Validate]