diff options
author | Sebastian Schmidt <mrschmidt@google.com> | 2017-11-30 13:28:36 -0800 |
---|---|---|
committer | Sebastian Schmidt <mrschmidt@google.com> | 2017-11-30 13:29:26 -0800 |
commit | d200fe09efaa57ed7e014e76d1bed52992f7ebc5 (patch) | |
tree | 1958b6acde6fe1b94506d9498119691380692893 | |
parent | df76451b3101c47865ccd5721c96a37ca8c8fa70 (diff) |
Checking for stream close in handleStreamClose
-rw-r--r-- | Firestore/Source/Remote/FSTStream.m | 13 | ||||
-rw-r--r-- | Firestore/Source/Util/FSTDispatchQueue.m | 5 |
2 files changed, 9 insertions, 9 deletions
diff --git a/Firestore/Source/Remote/FSTStream.m b/Firestore/Source/Remote/FSTStream.m index 9a780e5..ac51cb9 100644 --- a/Firestore/Source/Remote/FSTStream.m +++ b/Firestore/Source/Remote/FSTStream.m @@ -343,14 +343,13 @@ static const NSTimeInterval kIdleTimeout = 60.0; - (void)closeWithFinalState:(FSTStreamState)finalState error:(nullable NSError *)error { FSTAssert(finalState == FSTStreamStateError || error == nil, @"Can't provide an error when not in an error state."); - - [self.workerDispatchQueue verifyIsCurrentQueue]; - [self cancelIdleCheck]; - FSTAssert(self.delegate, @"closeWithFinalState should only be called for a started stream that has an active " @"delegate."); + [self.workerDispatchQueue verifyIsCurrentQueue]; + [self cancelIdleCheck]; + if (finalState != FSTStreamStateError) { // If this is an intentional close ensure we don't delay our next connection attempt. [self.backoff reset]; @@ -516,7 +515,11 @@ static const NSTimeInterval kIdleTimeout = 60.0; */ - (void)handleStreamClose:(nullable NSError *)error { FSTLog(@"%@ %p close: %@", NSStringFromClass([self class]), (__bridge void *)self, error); - FSTAssert([self isStarted], @"Can't handle server close in non-started state."); + + if (![self isStarted]) { // The stream could have already been closed by the idle close timer. + FSTLog(@"%@ Ignoring server close for already closed stream.", NSStringFromClass([self class])); + return; + } // In theory the stream could close cleanly, however, in our current model we never expect this // to happen because if we stop a stream ourselves, this callback will never be called. To diff --git a/Firestore/Source/Util/FSTDispatchQueue.m b/Firestore/Source/Util/FSTDispatchQueue.m index 9ca28a2..6ce5d74 100644 --- a/Firestore/Source/Util/FSTDispatchQueue.m +++ b/Firestore/Source/Util/FSTDispatchQueue.m @@ -58,10 +58,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)dispatchAfterDelay:(NSTimeInterval)delay block:(void (^)(void))block { dispatch_time_t delayNs = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)); - dispatch_after(delayNs, self.queue, ^() { - // Make sure that we prioritize tasks that are already queued for immediate execution. - [self dispatchAsyncAllowingSameQueue:block]; - }); + dispatch_after(delayNs, self.queue, block); } #pragma mark - Private Methods |