Class: Opal::Builder::Scheduler::Prefork::Fork
- Inherits:
-
Object
- Object
- Opal::Builder::Scheduler::Prefork::Fork
- Defined in:
- opal/lib/opal/builder/scheduler/prefork.rb
Instance Method Summary collapse
- #close ⇒ Object
- #eof? ⇒ Boolean
- #fork? ⇒ Boolean
- #goodbye ⇒ Object
-
#initialize(forkset) ⇒ Fork
constructor
A new instance of Fork.
- #read_io ⇒ Object
- #recv ⇒ Object
- #recv_message(io) ⇒ Object
- #send(*msg) ⇒ Object
- #send_message(io, msg) ⇒ Object
- #wait ⇒ Object
- #write_io ⇒ Object
Constructor Details
#initialize(forkset) ⇒ Fork
Returns a new instance of Fork.
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 134 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 |
Instance Method Details
#close ⇒ Object
160 161 162 163 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 160 def close send(:close) @parent_write.close end |
#eof? ⇒ Boolean
191 192 193 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 191 def eof? write_io.closed? end |
#fork? ⇒ Boolean
179 180 181 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 179 def fork? @in_fork end |
#goodbye ⇒ Object
165 166 167 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 165 def goodbye read_io.close unless read_io.closed? end |
#read_io ⇒ Object
183 184 185 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 183 def read_io fork? ? @child_read : @parent_read end |
#recv ⇒ Object
199 200 201 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 199 def recv (read_io) end |
#recv_message(io) ⇒ Object
174 175 176 177 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 174 def (io) length, = *io.read(8).unpack('Q') Marshal.load(io.read(length)) # rubocop:disable Security/MarshalLoad end |
#send(*msg) ⇒ Object
195 196 197 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 195 def send(*msg) (write_io, msg) end |
#send_message(io, msg) ⇒ Object
169 170 171 172 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 169 def (io, msg) msg = Marshal.dump(msg) io.write([msg.length].pack('Q') + msg) end |
#wait ⇒ Object
203 204 205 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 203 def wait Process.waitpid(@pid, Process::WNOHANG) end |
#write_io ⇒ Object
187 188 189 |
# File 'opal/lib/opal/builder/scheduler/prefork.rb', line 187 def write_io fork? ? @child_write : @parent_write end |