xenomachina
03/11/2021, 5:18 PMlouiscad
03/11/2021, 5:28 PMMutex , know that it is not reentrant.xenomachina
03/11/2021, 5:31 PMMutex, just using channels.louiscad
03/11/2021, 5:34 PMCancellationException not caught when it should not, and not rethrown.xenomachina
03/11/2021, 5:36 PMlouiscad
03/11/2021, 5:38 PMChannel, kinda like event buses, then it's harder to figure things out.
Often, you can hide it in internals, behind a façade that exposes safer things like plain suspending functions, or Flow s, where it's unlikely you can get deadlocks.xenomachina
03/11/2021, 5:44 PMxenomachina
03/11/2021, 5:45 PMlouiscad
03/11/2021, 5:46 PMlouiscad
03/11/2021, 5:47 PMxenomachina
03/11/2021, 5:47 PMlouiscad
03/11/2021, 5:48 PMxenomachina
03/11/2021, 5:48 PMsun.misc.Unsafe.park().louiscad
03/11/2021, 5:49 PMpark?xenomachina
03/11/2021, 5:50 PMlouiscad
03/11/2021, 5:52 PMlouiscad
03/11/2021, 5:52 PMlouiscad
03/11/2021, 5:52 PMxenomachina
03/11/2021, 5:53 PMlouiscad
03/11/2021, 5:54 PMwithLog(…) { } function that has a try catch finally block (and rethrows after logging), so it's less code to log entry/exit of suspend calls that might be the culprit.xenomachina
03/11/2021, 6:00 PMlouiscad
03/11/2021, 6:02 PMxenomachina
03/11/2021, 6:07 PMlouiscad
03/11/2021, 7:31 PMuli
03/11/2021, 9:50 PMsun.misc.Unsafe.park() ?xenomachina
03/11/2021, 10:11 PMwhile (!isItDone()) {
delay(100)
}
So when I was pausing in the debugger my test was inside the delay(100), but unfortunately, the call stack in the debugger didn't show delay, or any of my code. Just the test framework, and about 5 other stack frames leading up to park.