module Covered::Forks::Handler
def _fork
def _fork pid = super if pid.zero? Handler.after_fork end return pid end
def after_fork
def after_fork return unless coverage = Handler.coverage pid = Process.pid # Any pre-existing coverage is being tracked by the parent process, so discard it. coverage.clear at_exit do # Don't break forked children: if Process.pid == pid coverage.finish end end end
def finish
def finish LOCK.synchronize do @coverage = nil end end
def start(coverage)
def start(coverage) LOCK.synchronize do if @coverage raise ArgumentError, "Coverage is already being tracked!" end @coverage = coverage end end