Kotlin/kotlinx.coroutines

CoroutinesTimeout non-coroutines jobs dump

Open

#1,543 opened on Sep 17, 2019

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

Repository metrics

Stars
 (13,749 stars)
PR merge metrics
 (Avg merge 130d 3h) (4 merged PRs in 30d)

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