 				if !shouldDispose, case .terminating = signal.state {
 					signal.sendLock.lock()
 
-					if let snapshot = signal.shouldReallyTerminate() {
-						for observer in snapshot.observers {
-							observer.action(snapshot.associated)
+					if let terminatingState = signal.shouldReallyTerminate() {
+						for observer in terminatingState.observers {
+							observer.action(terminatingState.event)
 						}
 
 						shouldDispose = true

		if case let .alive(snapshot) = state {
			var observers = snapshot.observers
			token = observers.insert(observer)
			state = .alive(SignalStateSnapshot(observers: observers, retaining: self))
		}
		updateLock.unlock()


			//
			//   `updateLock` must be acquired.
			//
			// - Transition from `alive` to `terminating`.
			//
			//   `updateLock` must be acquired.
			//
			// - Deliver the termination event in the `terminating` state, and
			//   transition from `terminating` to `terminated`.
			//
			//   Both `sendLock` and `updateLock` must be acquired. The state must
			//   also be checked again after the locks are acquired. Fail gracefully
