Skip to content

Commit 91da78f

Browse files
author
Rechee
committed
make sure we're waiting for delayJob properly
1 parent 1c859c8 commit 91da78f

File tree

3 files changed

+27
-21
lines changed

3 files changed

+27
-21
lines changed

reactive/kotlinx-coroutines-rx2/src/RxScheduler.kt

+9-8
Original file line numberDiff line numberDiff line change
@@ -114,22 +114,23 @@ private class SchedulerChannelTask(
114114
parentJob: Job
115115
) : Disposable {
116116
private val taskScope = CoroutineScope(dispatcher + Job(parentJob))
117-
private val delayJob: Job
117+
private val delayResult: Deferred<Unit>
118118

119119
init {
120-
delayJob = taskScope.launch {
120+
delayResult = taskScope.async {
121121
delay(delayMillis)
122122
}
123123
}
124124

125125
fun execute() {
126-
if (delayJob.isCompleted && taskScope.isActive) {
127-
block.run()
128-
} else {
129-
taskScope.launch {
130-
delayJob.join()
131-
yield()
126+
if (taskScope.isActive) {
127+
if (delayResult.isCompleted) {
132128
block.run()
129+
} else {
130+
taskScope.launch {
131+
delayResult.await()
132+
block.run()
133+
}
133134
}
134135
}
135136
}

reactive/kotlinx-coroutines-rx2/test/SchedulerStressTest.kt

+11-8
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,17 @@ class SchedulerStressTest : TestBase() {
4242
val n = 2000 * stressTestMultiplier
4343
coroutineScope {
4444
repeat(n) { i ->
45-
val a = ByteArray(1000000) //1MB
46-
val disposable = block(Runnable {
47-
runBlocking {
48-
keepMe(a)
49-
}
50-
})
51-
disposable.dispose()
52-
expect(i + 2)
45+
launch {
46+
val a = ByteArray(1000000) //1MB
47+
val disposable = block(Runnable {
48+
expectUnreached()
49+
runBlocking {
50+
keepMe(a)
51+
}
52+
})
53+
disposable.dispose()
54+
expect(i + 2)
55+
}
5356
yield()
5457
}
5558
}

reactive/kotlinx-coroutines-rx2/test/SchedulerTest.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -313,11 +313,13 @@ class SchedulerTest : TestBase() {
313313
val iterations = 2
314314
coroutineScope {
315315
for (i in (0..iterations)) {
316-
suspendCancellableCoroutine<Unit> {
317-
worker.schedule(Runnable {
318-
expect(2 + i)
319-
it.resume(Unit)
320-
})
316+
launch {
317+
suspendCancellableCoroutine<Unit> {
318+
worker.schedule(Runnable {
319+
expect(2 + i)
320+
it.resume(Unit)
321+
})
322+
}
321323
}
322324
}
323325
}

0 commit comments

Comments
 (0)