 					state = .terminated
 					stateLock.unlock()
 
-					defer { sendLock.unlock() }
-
 					if let event = terminationKind.materialize() {
 						for observer in observers {
 							observer.action(event)
 						}
 					}
 
-					return .shouldDispose
+					sendLock.unlock()
+					disposable.dispose()
+					return
 				}
 			}
 
 			stateLock.unlock()
-			return .none
 		}
 
 		/// Try to dispose of the signal silently if the `Signal` has deinitialized and

			}

			// Attempt to start the disposal of the signal if it has no active observer.
			var result = tryToDisposeSilentlyIfQualified()

			stateLock.unlock()

			if result == .shouldTryCommitTermination {
				result = tryToCommitTermination()
			}

			if result == .shouldDispose {
				disposable.dispose()
			}
		}

		deinit {

				let observer = newObservers.remove(using: token)
				self.state = .alive(newObservers, hasDeinitialized: hasDeinitialized)

				// Ensure `observer` is deallocated after `stateLock` is
				// released to avoid deadlocks.
				withExtendedLifetime(observer) {
					// Start the disposal of the `Signal` core if the `Signal` has
					// deinitialized and there is no active observer.
					tryToDisposeSilentlyIfQualified(unlocking: stateLock)
				}
			} else {
				stateLock.unlock()
