CoveredSourceCoveredForksHandlerself

class << self

Definitions

def coverage

The currently registered coverage wrapper.

Signature

returns Covered::Forks | Nil

Implementation

def coverage
	LOCK.synchronize do
		@coverages&.last
	end
end

def start(coverage)

Register coverage for fork handling.

Signature

parameter coverage Covered::Forks

The coverage wrapper to use in forked children.

Implementation

def start(coverage)
	LOCK.synchronize do
		(@coverages ||= []) << coverage
	end
end

def finish(coverage = nil)

Clear the registered coverage.

Implementation

def finish(coverage = nil)
	LOCK.synchronize do
		if coverage
			@coverages&.delete(coverage)
		else
			@coverages&.pop
		end
	end
end

def after_fork

Reset coverage in a forked child and save it at exit.

Implementation

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