Comments (1)
I am not exactly sure what the desired behaviour is.
First things first, let's figure out "undispatched" coroutines behaviour:
suspend fun weWantToUseSteppingInThisFunction() {
println("A")
DebugProbes.dumpCoroutinesInfo().map {
println("State: ${it.state}")
}
delay(100)
println("B")
}
launch(start = CoroutineStart.UNDISPATCHED) { // or launch(Dispatchers.Unconfined)
weWantToUseSteppingInThisFunction()
}
For the UNDISPATCHED
case, it will print
A
State: RUNNING
State: CREATED
while for UNCONFINED
it's
State: RUNNING
State: RUNNING
No matter the nesting statuses decision, the UNDISPATCHED
behaviour is clearly a bug -- there shouldn't be any reasonable situations when we are within coroutine body but consider coroutine non-running.
The fix is most likely straightforward -- startDirect
rightfully notifies the debugger about the creating, but not about the actual start, and it also bypasses coroutine intrinsics that could've done so for it. We can change it by notifying it right in the same place.
When the coroutine machinery thinks that A is executed by the outer coroutine, this becomes impossible.
If this is the root cause of our stepping problem, then we can agree this is a bug and fix it. But, if the problem lies in the fact that we have two nested running coroutines in the same thread, then this is uncharted territory where we'll have to find some solution because, depending on the angle you are looking at that, the outer coroutine might or might not be RUNNING
and might or might not be SUSPENDED
(note: transition to SUSPENDED
is not a side-effect free action and also can confuse users when they expect outer coroutine not to suspend)
from kotlinx.coroutines.
Related Issues (20)
- [CVE-2023-2976] Vulnerability - Recommended Guava version upgrade HOT 1
- Kotlin collect flow wont work in a react-native bridge HOT 1
- Remove @ExperimentalCoroutinesApi from CancellableContinuation.resume(...) HOT 2
- kotlinx.coroutines.CoroutinesInternalError: Fatal exception in coroutines machinery for CancellableContinuation HOT 12
- Flow multiplexing HOT 1
- Play Services artifact Gradle Module Metadata doesn't advertise the sources jar's existence HOT 2
- How to use Flows in an imperative mode? HOT 3
- Provide an API to invoke a callback on job cancellation
- Even After bumping kotlinx coroutine test dependency to 1.8.0 giving an UncaughtExceptionsBeforeTest. HOT 4
- ThreadLocal.asContextElement may not be cleaned up when used with Dispatchers.Main.immediate HOT 8
- `kotlinx.coroutines.debug`'s `module-info.java` is incorrect preventing any project using JPMS to use debug probes
- BlockHound false positive in kotlin.jvm.internal.Reflection.renderLambdaToString HOT 3
- java.lang.NullPointerException: Cannot invoke "kotlinx.coroutines.flow.Flow.collect when bumping up coroutines 1.6.4 to 1.8.1 HOT 1
- Improve the API reference HOT 3
- Coroutine on EventLoop dispatcher fails to yield to a task which is resuming after a delay HOT 5
- TestScope swallows an exception thrown from `launch` outside `runTest` HOT 4
- Exceptions being swallowed during tests / UncaughtExceptionsBeforeTest HOT 5
- Flow collection silently hangs when dispatcher throws an exception
- Suggestion for a potential new Flow's `timeout` extension
- Mutex is unlocked on cancellation
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kotlinx.coroutines.