I’m observing what seems to be a very strange dead...
# compose-ios
a
I’m observing what seems to be a very strange deadlock with compose multiplatform on iOS. It seems animation related, see thread for stacktrace
👍 1
__psynch_cvwait 0x00007ff8376f00ee
_pthread_cond_wait 0x00007ff83774d758
interop_lock_wrapper2 0x000000010106f13d
kotlinx.atomicfu.locks.SynchronizedObject.lock#internal Synchronized.kt:154
SynchronizedObject#lock Synchronized.kt:33
synchronized Synchronized.kt:173
synchronized Synchronization.kt:33
sync Snapshot.kt:1687
<anonymous> SnapshotState.kt:298
withCurrent Snapshot.kt:2181
SnapshotMutableStateImpl#<set-value> SnapshotState.kt:131
setValue SnapshotState.kt:102
AnimationState#<set-value> AnimationState.kt:53
AnimationScope<00,01> SuspendAnimation.kt:319
androidx.compose.animation.core.doAnimationFrame#internal SuspendAnimation.kt:360
androidx.compose.animation.core.doAnimationFrameWithScale#internal SuspendAnimation.kt:339
androidx.compose.animation.core.animate$lambda$6#internal SuspendAnimation.kt:279
androidx.compose.animation.core.$animate$lambda$6$FUNCTION_REFERENCE$4.invoke#internal SuspendAnimation.kt:278
$<bridge-UNNB>invoke SuspendAnimation.kt:278
androidx.compose.animation.core.callWithFrameNanos$lambda$7#internal SuspendAnimation.kt:304
androidx.compose.animation.core.$callWithFrameNanos$lambda$7$FUNCTION_REFERENCE$6.invoke#internal SuspendAnimation.kt:303
$<bridge-NNNB>invoke SuspendAnimation.kt:303
<anonymous> BroadcastFrameClock.kt:42
androidx.compose.runtime.BroadcastFrameClock.FrameAwaiter.resume#internal BroadcastFrameClock.kt:132
<anonymous> BroadcastFrameClock.kt:71
synchronized Synchronized.kt:175
synchronized Synchronization.kt:33
BroadcastFrameClock#sendFrame BroadcastFrameClock.kt:62
<anonymous> Recomposer.kt:517
trace Trace.kt:48
androidx.compose.runtime.Recomposer.runRecomposeAndApplyChanges$lambda$4$lambda$3#internal Recomposer.kt:514
androidx.compose.runtime.Recomposer.$runRecomposeAndApplyChanges$lambda$4$lambda$3$FUNCTION_REFERENCE$7.invoke#internal Recomposer.kt:510
$<bridge-UNNB>invoke Recomposer.kt:510
<anonymous> BroadcastFrameClock.kt:42
androidx.compose.runtime.BroadcastFrameClock.FrameAwaiter.resume#internal BroadcastFrameClock.kt:132
<anonymous> BroadcastFrameClock.kt:71
synchronized Synchronized.kt:175
synchronized Synchronization.kt:33
BroadcastFrameClock#sendFrame BroadcastFrameClock.kt:62
<anonymous> ComposeScene.skiko.kt:417
postponeInvalidation ComposeScene.skiko.kt:159
ComposeScene#render ComposeScene.skiko.kt:415
ComponentImpl#onRender ComposeLayer.jsNative.kt:59
SkiaLayer#draw SkiaLayer.ios.kt:109
org.jetbrains.skiko.context.MetalContextHandler.$draw$FUNCTION_REFERENCE$0.invoke#internal MetalContextHandler.kt:9
$<bridge-UNNN>invoke MetalContextHandler.kt:9
<anonymous> ContextHandler.kt:52
apply Standard.kt:83
ContextHandler#draw ContextHandler.kt:50
<anonymous> MetalRedrawer.ios.kt:93
autoreleasepool ObjectiveCUtils.kt:22
org.jetbrains.skiko.redrawer.MetalRedrawer.draw#internal MetalRedrawer.ios.kt:91
org.jetbrains.skiko.redrawer.MetalRedrawer.<init>$lambda$0#internal MetalRedrawer.ios.kt:38
org.jetbrains.skiko.redrawer.MetalRedrawer.$<init>$lambda$0$FUNCTION_REFERENCE$0.invoke#internal MetalRedrawer.ios.kt:35
$<bridge-UNN>invoke MetalRedrawer.ios.kt:35
org.jetbrains.skiko.redrawer.FrameTickListener.onDisplayLinkTick#internal MetalRedrawer.ios.kt:159
org.jetbrains.skiko.redrawer.FrameTickListener.$imp:onDisplayLinkTick#internal MetalRedrawer.ios.kt:158
CA:DisplayDisplayLink:dispatch_items(unsigned long long, unsigned long long, unsigned long long) 0x00000001060ee2d8
display_timer_callback(__CFMachPort*, void*, long, void*) 0x0000000106222853
__CFMachPortPerform 0x0000000105126987
__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ 0x000000010515b37e
__CFRunLoopDoSource1 0x000000010515a8e8
__CFRunLoopRun 0x00000001051550b0
CFRunLoopRunSpecific 0x0000000105154264
GSEventRunModal 0x000000010a35924e
-[UIApplication _run] 0x000000011e9467bf
UIApplicationMain 0x000000011e94b5de
<unknown> 0x000000010e94d5ed
<unknown> 0x000000010e94d4a6
<unknown> 0x000000010e063610
$s8EnocLink6iOSAppV5$mainyyFZ iOSApp.swift:4
main iOSApp.swift:0
start_sim 0x000000010399d384
start 0x000000010978841f
I’ll try to get some minimum repro steps based on the template project
any help would be greatly appreciated
it’s worth noting, this seems to happen when a composable containing a text field is disposed. This can be either
BasicTextField
or the material
OutlinedTextField
, but I feel I observed it more often with the latter, it could have just been chance though
it happens without also, but less frequent 😕
a
Sounds like this issue, which is fixed in Jetpack Compose 1.5.0-alpha03. Not sure if it's included in the dev version of compose multiplatform.
a
I'll try a dev version anyway, thanks!
still happening on 1.5.0-dev1071, that change is included
It happens when using
someFlow.collectAsState()
when
someFlow
isn’t flowing on the main dispatcher, like
Dispatchers.Default