/usr/lib/ruby/vendor_ruby/em-synchrony/em-multi.rb is in ruby-em-synchrony 1.0.5-2ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | module EventMachine
module Synchrony
class Multi
include EventMachine::Deferrable
attr_reader :requests, :responses
def initialize
@requests = {}
@responses = {:callback => {}, :errback => {}}
end
def add(name, conn)
raise 'Duplicate Multi key' if @requests.key? name
@requests[name] = conn
fiber = Fiber.current
conn.callback { @responses[:callback][name] = conn; check_progress(fiber) }
conn.errback { @responses[:errback][name] = conn; check_progress(fiber) }
end
def finished?
(@responses[:callback].size + @responses[:errback].size) == @requests.size
end
def perform
Fiber.yield unless finished?
end
protected
def check_progress(fiber)
if finished?
succeed
# continue processing
fiber.resume(self) if fiber.alive? && fiber != Fiber.current
end
end
end
end
end
|