From 74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76 Mon Sep 17 00:00:00 2001 From: Aleksei Minaev Date: Thu, 14 Mar 2019 16:12:17 +0100 Subject: [PATCH] Update order of invocation in sendNext: RACReplaySubject valuesReceived should be cleaned up before sending value. If we have subscription and creating another subscription on the same RACReplaySubject while -take:1 it - we can get first value instead of second. --- ReactiveObjC/RACReplaySubject.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ReactiveObjC/RACReplaySubject.m b/ReactiveObjC/RACReplaySubject.m index 30475fa9e..ee97ff9e9 100644 --- a/ReactiveObjC/RACReplaySubject.m +++ b/ReactiveObjC/RACReplaySubject.m @@ -85,11 +85,12 @@ - (RACDisposable *)subscribe:(id)subscriber { - (void)sendNext:(id)value { @synchronized (self) { [self.valuesReceived addObject:value ?: RACTupleNil.tupleNil]; - [super sendNext:value]; if (self.capacity != RACReplaySubjectUnlimitedCapacity && self.valuesReceived.count > self.capacity) { [self.valuesReceived removeObjectsInRange:NSMakeRange(0, self.valuesReceived.count - self.capacity)]; } + + [super sendNext:value]; } }