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

Loading…
Cancel
Save