class Celluloid::Condition::Waiter

Attributes

condition[R]
task[R]

Public Class Methods

new(condition, task, mailbox, timeout) click to toggle source
# File lib/celluloid/condition.rb, line 5
def initialize(condition, task, mailbox, timeout)
  @condition = condition
  @task = task
  @mailbox = mailbox
  @timeout = timeout
end

Public Instance Methods

<<(message) click to toggle source
# File lib/celluloid/condition.rb, line 13
def <<(message)
  @mailbox << message
end
wait() click to toggle source
# File lib/celluloid/condition.rb, line 17
def wait
  begin
    message = @mailbox.receive(@timeout) do |msg|
      msg.is_a?(SignalConditionRequest) && msg.task == Thread.current
    end
  rescue TimedOut
    raise ConditionError, "timeout after #{@timeout.inspect} seconds"
  end until message

  message.value
end