Skip to content

Commit b63fd82

Browse files
qwwdfsadelizarov
authored andcommitted
Unpark event-loop thread only when it's necessary
1 parent e29f497 commit b63fd82

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

core/kotlinx-coroutines-core/src/EventLoop.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,12 +243,14 @@ internal abstract class EventLoopBase: CoroutineDispatcher(), Delay, EventLoop {
243243

244244
internal fun schedule(delayedTask: DelayedTask) {
245245
if (scheduleImpl(delayedTask)) {
246-
unpark()
246+
if (shouldUnpark(delayedTask)) unpark()
247247
} else {
248248
DefaultExecutor.schedule(delayedTask)
249249
}
250250
}
251251

252+
private fun shouldUnpark(task: DelayedTask): Boolean = _delayed.value?.peek() === task
253+
252254
private fun scheduleImpl(delayedTask: DelayedTask): Boolean {
253255
if (isCompleted) return false
254256
val delayed = _delayed.value ?: run {

0 commit comments

Comments
 (0)