Sha256: fdefa8d05e2e6b73a90f8248fb8c7c67796e90820dc1a22d4c2b36100fb3868b
Contents?: true
Size: 1.34 KB
Versions: 1
Compression:
Stored size: 1.34 KB
Contents
module Mutant # Module providing isolation module Isolation Error = Class.new(RuntimeError) module None # Call block in isolation # # @return [Object] # # @raise [Error] # if block terminates abnormal # # @api private # def self.call(&block) block.call rescue => exception fail Error, exception end end module Fork # Call block in isolation # # This isolation implements the fork strategy. # Future strategies will probably use a process pool that can # handle multiple mutation kills, in-isolation at once. # # @return [Object] # returns block execution result # # @raise [Error] # if block terminates abnormal # # @api private # def self.call(&block) reader, writer = IO.pipe pid = Process.fork do File.open('/dev/null', 'w') do |file| $stderr.reopen(file) reader.close writer.write(Marshal.dump(block.call)) writer.close end end writer.close result = Marshal.load(reader.read) result rescue => exception fail Error, exception ensure Process.waitpid(pid) if pid end end # Fork end # Isolator end # Mutant
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mutant-0.6.7 | lib/mutant/isolation.rb |