Kotlin/kotlinx.coroutines

CoroutinesTimeout non-coroutines jobs dump

Open

#1543 opened on Sep 17, 2019

View on GitHub
 (4 comments) (0 reactions) (1 assignee)Kotlin (13,749 stars) (1,927 forks)batch import
debugenhancementhelp wanted

Description

It would be convenient to see non-coroutines incomplete Job instances in coroutines dumps as well. It will improve structured jobs analysis in the case when a Job (or CompletableDeferred) prevents a parent from completion.

The following example test hangs because of a job and a completable deferred, but the coroutines dump doesn't provide enough information, so it's not that easy to backtrace the reason.

class DumpTest {
    @get:Rule
    val timeout: CoroutinesTimeout = CoroutinesTimeout.seconds(1)

    private val parent = Job()

    @BeforeTest
    fun start() {
        Job(parent)
        CompletableDeferred<Unit>(parent)
    }

    @Test
    fun test(): Unit = runBlocking(CoroutineName("blocking")) {
        parent.complete()
        parent.join()
    }
}

Contributor guide