File tree Expand file tree Collapse file tree 3 files changed +41
-3
lines changed Expand file tree Collapse file tree 3 files changed +41
-3
lines changed Original file line number Diff line number Diff line change 1
1
# master
2
2
* Please add new entries at the top.*
3
3
4
+ 1 . Fixed issue where ` SingalProducer.try(upTo:interval:count:) ` shares state between invocation of ` start ` on the same producer.
5
+
4
6
# 6.7.0
5
7
# 6.7.0-rc1
6
8
42
44
1 . Bumped deployment target to iOS 9.0, per Xcode 12 warnings. (#818 , kudos to @harleyjcooper )
43
45
44
46
1 . Fixed a few deprecation warning when the project is being built. (#819 , kudos to @apps4everyone )
45
- >>>>>>> origin/master
46
47
47
48
# 6.5.0
48
49
Original file line number Diff line number Diff line change @@ -2393,9 +2393,10 @@ extension SignalProducer {
2393
2393
return producer
2394
2394
}
2395
2395
2396
- var retries = count
2396
+ return SignalProducer { observer, lifetime in
2397
+ var retries = count
2397
2398
2398
- return flatMapError { error -> SignalProducer < Value , Error > in
2399
+ lifetime += flatMapError { error -> SignalProducer < Value , Error > in
2399
2400
// The final attempt shouldn't defer the error if it fails
2400
2401
var producer = SignalProducer < Value , Error > ( error: error)
2401
2402
if retries > 0 {
@@ -2408,6 +2409,8 @@ extension SignalProducer {
2408
2409
return producer
2409
2410
}
2410
2411
. retry ( upTo: count)
2412
+ . start ( observer)
2413
+ }
2411
2414
}
2412
2415
2413
2416
/// Wait for completion of `self`, *then* forward all events from
Original file line number Diff line number Diff line change @@ -2812,6 +2812,40 @@ class SignalProducerSpec: QuickSpec {
2812
2812
expect ( errors) == [ . default]
2813
2813
}
2814
2814
2815
+ it ( " should not share retry counter across produced signals " ) {
2816
+ let scheduler = TestScheduler ( )
2817
+ var failuresReceived = 0
2818
+
2819
+ let original = SignalProducer < Int , TestError > { observer, _ in
2820
+ scheduler. schedule { observer. send ( error: . default) }
2821
+ }
2822
+ let retryDelay : DispatchTimeInterval = . seconds( 1 )
2823
+ let retriable = original
2824
+ . retry ( upTo: 1 , interval: retryDelay. timeInterval, on: scheduler)
2825
+ . on ( failed: { _ in failuresReceived += 1 } )
2826
+
2827
+ // 1st produced signal
2828
+ retriable. start ( )
2829
+
2830
+ scheduler. advance ( )
2831
+ expect ( failuresReceived) == 0
2832
+
2833
+ scheduler. advance ( by: retryDelay)
2834
+ expect ( failuresReceived) == 1
2835
+
2836
+ // 2nd produced signal
2837
+ retriable. start ( )
2838
+
2839
+ scheduler. advance ( )
2840
+ // Shared retry counter had caused the second produced signal not to defer the failed event as expected.
2841
+ // (https://github.com/ReactiveCocoa/ReactiveSwift/pull/829)
2842
+ // Assert that we did not receive the 2th final failure at this point, which should always be delayed until
2843
+ // at least `retryDelay` has elapsed.
2844
+ expect ( failuresReceived) == 1
2845
+
2846
+ scheduler. advance ( by: retryDelay)
2847
+ expect ( failuresReceived) == 2
2848
+ }
2815
2849
}
2816
2850
2817
2851
}
You can’t perform that action at this time.
0 commit comments