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 PMlouiscad
03/11/2021, 5:46 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 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
.