function Signal.Fire(P,...)local T=P._handlerListHead while T do if T._connected then if not freeRunnerThread then freeRunnerThread=coroutine.create(runEventHandlerInFreeThread)coroutine.resume(freeRunnerThread)end task.spawn(freeRunnerThread,T._fn,...)end T=T._next end end
-- Signal:Fire(...) implemented by running the handler functions on the
-- coRunnerThread, and any time the resulting thread yielded without returning
-- to us, that means that it yielded to the Roblox scheduler and has been taken
-- over by Roblox scheduling, meaning we have to make a new coroutine runner.
function Signal:Fire(...)
	local item = self._handlerListHead
	while item do
		if item._connected then
			if not freeRunnerThread then
				freeRunnerThread = coroutine.create(runEventHandlerInFreeThread)
				-- Get the freeRunnerThread to the first yield
				coroutine.resume(freeRunnerThread)
			end
			task.spawn(freeRunnerThread, item._fn, ...)
		end
		item = item._next
	end
end
