 					// Check if a downstream consumer or a concurrent sender has
 					// interrupted the signal.
 					if let state = terminationState {
-						interrupt(state.observers, event: terminationEvent!)
+						terminate(with: state)
 						shouldDispose = true
 					}
 				}

					// lock acquisition above succeeds. So we have to check again if the
					// signal is really still alive.
					if !terminated {
						interrupt(state.observers, event: terminationEvent!)
						shouldDispose = true
					}


				// the disposal would be delegated to the current sender, or
				// occasionally one of the senders waiting on `sendLock`.
				if let state = signal.state.swap(nil) {
					terminationState = SignalTerminationState(state: state,
					                                          event: event)

					// Writes to `terminationState` are implicitly synchronized. So we do
					// not need to guard it with locks.
