 	}
 }
 
+/// The status of a `Signal`.
+private enum SignalStatus<Value, Error: Swift.Error> {
+	/// The `Signal` is alive.
+	case green
+
+	/// The `Signal` has received a termination event, and is about to be
+	/// terminated.
+	case yellow(SignalTerminationSnapshot<Value, Error>)
+
+	/// The `Signal` has terminated.
+	case red
+}
+
 /// A snapshot of the state of a `Signal` when it receives a termination event.
 ///
 /// - note: The snapshot must be a reference type, as the total size of all
 ///         stored properties might span beyond a cache line, resulting in
 ///         corrupted states being observed by the event emitter.
-private final class SignalTerminationState<Value, Error: Swift.Error> {
+private final class SignalTerminationSnapshot<Value, Error: Swift.Error> {
 	private let state: SignalState<Value, Error>
 	private let event: Event<Value, Error>
 

	}

	/// Send the termination event to the observers.
	func send() {
		for observer in state.observers {
			observer.action(event)

	///                that will act as an event emitter for the signal.
	public init(_ generator: (Observer) -> Disposable?) {
		state = Atomic(SignalState())
		status = .green
		sendLock = NSLock()
		sendLock.name = "org.reactivecocoa.ReactiveSwift.Signal"

		let observer = Observer { [weak self] event in
			guard let signal = self else {
