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