Experimental: weak subscribers

This commit is contained in:
Ali 2023-09-19 18:55:31 +02:00
parent 2f5848d354
commit 0fd360f481

View File

@ -24,7 +24,7 @@ public func |> <T, U>(value: T, function: ((T) -> U)) -> U {
} }
private final class SubscriberDisposable<T, E>: Disposable, CustomStringConvertible { private final class SubscriberDisposable<T, E>: Disposable, CustomStringConvertible {
private let subscriber: Subscriber<T, E> private weak var subscriber: Subscriber<T, E>?
private var lock = pthread_mutex_t() private var lock = pthread_mutex_t()
private var disposable: Disposable? private var disposable: Disposable?
@ -41,15 +41,18 @@ private final class SubscriberDisposable<T, E>: Disposable, CustomStringConverti
} }
func dispose() { func dispose() {
self.subscriber.markTerminatedWithoutDisposal() var subscriber: Subscriber<T, E>?
var disposeItem: Disposable? var disposeItem: Disposable?
pthread_mutex_lock(&self.lock) pthread_mutex_lock(&self.lock)
disposeItem = self.disposable disposeItem = self.disposable
subscriber = self.subscriber
self.subscriber = nil
self.disposable = nil self.disposable = nil
pthread_mutex_unlock(&self.lock) pthread_mutex_unlock(&self.lock)
disposeItem?.dispose() disposeItem?.dispose()
subscriber?.markTerminatedWithoutDisposal()
} }
public var description: String { public var description: String {