 	func buffer(capacity: Int? = nil) -> (Producer<T>, Disposable) {
 		let buffer = EventBuffer<T>(capacity: capacity)
 
+		// TODO: How does `self` get retained properly?
 		let observationDisposable = self.observe { value in
 			buffer.put(.Next(Box(value)))
 		}

/// A push-driven stream that sends the same values to all observers.
@final class Signal<T> {
	let _queue = dispatch_queue_create("com.github.ReactiveCocoa.Signal", DISPATCH_QUEUE_CONCURRENT)
	var _current: T? = nil
	var _observers: [Box<SinkOf<T>>] = []


			box.value.put(self._current!)
		}

		return ActionDisposable { [weak self] in
			if let strongSelf = self {
				dispatch_barrier_async(strongSelf._queue) {
					strongSelf._observers = removeObjectIdenticalTo(box, fromArray: strongSelf._observers)
				}
			}
		}
	}
