Simply queue up writesFinishedWithError without cancelling pending messages

pull/11070/head
Muxi Yan 8 years ago
parent 08fef09ed1
commit d6cee15135
  1. 19
      src/objective-c/RxLibrary/GRXBufferedPipe.m

@ -73,17 +73,11 @@
} }
- (void)writesFinishedWithError:(NSError *)errorOrNil { - (void)writesFinishedWithError:(NSError *)errorOrNil {
if (errorOrNil) {
// No need to write pending values.
_errorOrNil = errorOrNil;
[self finishWithError:_errorOrNil];
} else {
__weak GRXBufferedPipe *weakSelf = self; __weak GRXBufferedPipe *weakSelf = self;
dispatch_async(_writeQueue, ^{ dispatch_async(_writeQueue, ^{
[weakSelf finishWithError:nil]; [weakSelf finishWithError:nil];
}); });
} }
}
#pragma mark GRXWriter implementation #pragma mark GRXWriter implementation
@ -98,7 +92,7 @@
case GRXWriterStateFinished: case GRXWriterStateFinished:
self.writeable = nil; self.writeable = nil;
if (_state == GRXWriterStatePaused) { if (_state == GRXWriterStatePaused) {
_writeQueue = nil; dispatch_resume(_writeQueue);
} }
_state = newState; _state = newState;
return; return;
@ -109,7 +103,8 @@
} }
return; return;
case GRXWriterStateStarted: case GRXWriterStateStarted:
if (_state == GRXWriterStatePaused) { if (_state == GRXWriterStatePaused ||
_state == GRXWriterStateNotStarted) {
_state = newState; _state = newState;
dispatch_resume(_writeQueue); dispatch_resume(_writeQueue);
} }
@ -121,17 +116,13 @@
} }
- (void)startWithWriteable:(id<GRXWriteable>)writeable { - (void)startWithWriteable:(id<GRXWriteable>)writeable {
_state = GRXWriterStateStarted;
self.writeable = writeable; self.writeable = writeable;
dispatch_resume(_writeQueue); self.state = GRXWriterStateStarted;
} }
- (void)finishWithError:(NSError *)errorOrNil { - (void)finishWithError:(NSError *)errorOrNil {
id<GRXWriteable> writeable = self.writeable; [self.writeable writesFinishedWithError:errorOrNil];
self.state = GRXWriterStateFinished; self.state = GRXWriterStateFinished;
dispatch_async(_writeQueue, ^{
[writeable writesFinishedWithError:errorOrNil];
});
} }
@end @end

Loading…
Cancel
Save