 		}
 		updateActivationInternal(andInvalidateAllPrevious: true, dw: &dw)
 	}
-
+	
 	/// Increment the input generation count.
 	///
 	/// WARNING: internal methods must be performed inside their respective mutex

fileprivate class SignalCacheUntilActive<T>: SignalProcessor<T, T> {
	var cachedValues: Array<T> = []
	var cachedError: Error? = nil

	init(signal: Signal<T>, dw: inout DeferredWork) {
		super.init(signal: signal, dw: &dw, context: .direct)
	}

	/// Is always active
	fileprivate override var alwaysActiveInternal: Bool {
		assert(signal.mutex.unbalancedTryLock() == false)
		return true
	}

	/// Sends the cached values when an output connects
	fileprivate final override func sendActivationToOutputInternal(index: Int, dw: inout DeferredWork) {
		outputs[index].destination.value?.pushInternal(values: cachedValues, error: cachedError, dw: &dw)
	}

	/// Caches values prior to an output connecting
	override func initialHandlerInternal() -> (Result<T>) -> Void {
		assert(signal.mutex.unbalancedTryLock() == false)

	let sourceClosesOutput: Bool
	let removeOnDeactivate: Bool
	let mergeSet: SignalMergeSet<T>
	
	init(signal: Signal<T>, sourceClosesOutput: Bool, removeOnDeactivate: Bool, mergeSet: SignalMergeSet<T>, dw: inout DeferredWork) {
		self.sourceClosesOutput = sourceClosesOutput
		self.removeOnDeactivate = removeOnDeactivate
		self.mergeSet = mergeSet
		super.init(signal: signal, dw: &dw, context: .direct)
	}
	
	/// Can't share mutex since predecessor may swap between different graphs
	fileprivate override var successorsShareMutex: Bool {
		return false
