diff --git a/SwiftSignalKit/Subscriber.swift b/SwiftSignalKit/Subscriber.swift index 70d5ed832d..956af6e8cc 100644 --- a/SwiftSignalKit/Subscriber.swift +++ b/SwiftSignalKit/Subscriber.swift @@ -100,11 +100,18 @@ public final class Subscriber { var disposeDisposable: Disposable? = nil + var next: ((T) -> Void)? + var error: ((E) -> Void)? + var completed: (() -> Void)? + pthread_mutex_lock(&self.lock) if !self.terminated { action = self.completed + next = self.next self.next = nil + error = self.error self.error = nil + completed = self.completed self.completed = nil self.terminated = true @@ -113,6 +120,16 @@ public final class Subscriber { } pthread_mutex_unlock(&self.lock) + if let next = next { + withExtendedLifetime(next, {}) + } + if let error = error { + withExtendedLifetime(error, {}) + } + if let completed = completed { + withExtendedLifetime(completed, {}) + } + if action != nil { action() }