class Opal::BuilderScheduler::Prefork::Fork

Public Class Methods

new(forkset) { |self| ... } click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 133
def initialize(forkset)
  @parent_read, @child_write = IO.pipe(binmode: true)
  @child_read, @parent_write = IO.pipe(binmode: true)
  @forkset = forkset
  @in_fork = false

  @pid = fork do
    @in_fork = true

    begin
      @parent_read.close
      @parent_write.close

      yield(self)
    rescue => error
      send(:exception, error)
    ensure
      send(:close) unless write_io.closed?
      @child_write.close
    end
  end

  @child_read.close
  @child_write.close
end

Public Instance Methods

close() click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 159
def close
  send(:close)
  @parent_write.close
end
eof?() click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 190
def eof?
  write_io.closed?
end
fork?() click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 178
def fork?
  @in_fork
end
goodbye() click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 164
def goodbye
  read_io.close unless read_io.closed?
end
read_io() click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 182
def read_io
  fork? ? @child_read : @parent_read
end
recv() click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 198
def recv
  recv_message(read_io)
end
recv_message(io) click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 173
def recv_message(io)
  length, = *io.read(8).unpack('Q')
  Marshal.load(io.read(length)) # rubocop:disable Security/MarshalLoad
end
send(*msg) click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 194
def send(*msg)
  send_message(write_io, msg)
end
send_message(io, msg) click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 168
def send_message(io, msg)
  msg = Marshal.dump(msg)
  io.write([msg.length].pack('Q') + msg)
end
wait() click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 202
def wait
  Process.waitpid(@pid, Process::WNOHANG)
end
write_io() click to toggle source
# File lib/opal/builder_scheduler/prefork.rb, line 186
def write_io
  fork? ? @child_write : @parent_write
end