module Ractor::Channel::ClassMethods

Public Instance Methods

receive(channel: nil) click to toggle source
Calls superclass method
# File lib/ractor/channel.rb, line 22
def receive(channel: nil) # rubocop:disable Metrics/MethodLength (https://bugs.ruby-lang.org/issues/17374)
  if channel == :*
    SAVED_BY_CHANNEL.each do |_channel, queue|
      return queue.pop(true)
    rescue ThreadError
      # try next channel
    end
    super() # # FIXME: Not thread-safe
  else
    loop do
      return SAVED_BY_CHANNEL[channel].pop(true)
    rescue ThreadError
      dest_channel, message = super()
      SAVED_BY_CHANNEL[dest_channel] << message
    end
  end
end