{"push_id":3014649352,"size":1,"distinct_size":1,"ref":"refs/heads/stacktrace-recovery","head":"64d4861cdcb4b1619374816e212785531a3597d7","before":"1ca7753240f736101ffe71b02ec33698dd0bdb3c","commits":[{"sha":"64d4861cdcb4b1619374816e212785531a3597d7","author":{"name":"Vsevolod Tolstopyatov","email":"2d1bae51d688ac2f7eeed1fd8b431ccdce0dbab8@gmail.com"},"message":"Basic exception stacktrace recovery mechanism\n\n  * Implement CoroutineStackFrame in CancellableContinuationImpl, DispatchedContinuation and ScopeCoroutine\n  * On coroutine resumption try to reflectively instantiate exception instance of the same type, but with augmented stacktrace\n  * Recover stacktrace by walking over CoroutineStackFrame\n  * Recover stacktrace on fast-path exceptions without CoroutineStackFrame walking to provide more context to an exception\n  * Unwrap exceptions when doing aggregation in JobSupport\n  * Add kill-switch to disable stacktrace recovery, introduce method to recover stacktrace on the exceptional fast-path\n  * Add `suspendCoroutineOrReturn` on exceptional fast-path in await in order to provide \"real\" stacktrace\n\nDesign rationale:\nAll recovery of *suspended* continuations takes place in Dispatched.kt file, the only place where all calls to \"resume*\" ends up, so we don't have to remember about stacktrace recovery in every primitive we are implementing. But to provide more accurate stacktraces we *have to* recover it on every fast-path for better debuggability.\n\nFixes #493","distinct":true,"url":"https://api.github.com/repos/Kotlin/kotlinx.coroutines/commits/64d4861cdcb4b1619374816e212785531a3597d7"}]}
{"actor":{"display_login":"qwwdfsad"}}