 	/// Disposes of the generator provided at initialization time.
 	private let generatorDisposable = SerialDisposable()
 
-	/// When disposed of, the Signal should interrupt as soon as possible.
-	private let interruptionDisposable = SimpleDisposable()
+	/// When set to `true`, the Signal should interrupt as soon as possible.
+	private let interrupted = Atomic(false)
 
 	/// Initializes a Signal that will immediately invoke the given generator,
 	/// then forward events sent to the given observer.

				// So we'll flag Interrupted events specially, and if it
				// happened to occur while we're sending something else,
				// we'll wait to deliver it.
				self.interruptionDisposable.dispose()

				if self.sendLock.tryLock() {
					self.interrupt()

				sink.put(event)
			}

			let shouldInterrupt = !event.isTerminating && self.interrupted.value
			if shouldInterrupt {
				interrupt()
			}

			self.sendLock.unlock()

			if event.isTerminating || shouldInterrupt {
				// Dispose only after notifying observers, so disposal logic
				// is consistently the last thing to run.
				self.generatorDisposable.dispose()
