Skip to content

Commit ac1b516

Browse files
Test share
1 parent 15ddc74 commit ac1b516

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

Tests/RxSwiftTests/Anomalies.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,34 @@ extension AnomaliesTest {
176176
performSharingOperatorsTest(share: op)
177177
}
178178
}
179+
180+
func testShareReplayOneInitialEmissionDeadlock() {
181+
let exp = expectation(description: "`share(replay: 1)` doesn't cause a deadlock in multithreaded environment because it replays with its own lock acquired")
182+
183+
let sharedSource = Observable<Void>.create { observer in
184+
observer.on(.next(()))
185+
return Disposables.create()
186+
}
187+
188+
let triggerRange = 0..<100
189+
190+
let concurrentScheduler = ConcurrentDispatchQueueScheduler(qos: .userInitiated)
191+
192+
let multipleSubscriptions = Observable.zip(triggerRange.map { _ in
193+
Observable.just(())
194+
.observe(on: concurrentScheduler)
195+
.flatMap { _ in
196+
sharedSource
197+
.take(1)
198+
}
199+
})
200+
.take(1)
201+
202+
_ = multipleSubscriptions.subscribe(onCompleted: {
203+
exp.fulfill()
204+
})
205+
206+
207+
wait(for: [exp], timeout: 5)
208+
}
179209
}

0 commit comments

Comments
 (0)