skiko: Runtime SIGSEGV thrown on Linux ARM64 (libskiko-linux-arm64.so)

Hi, I am trying to run a project with Compose Multiplaftorm but have a runtime failure when running it on arm64 Linux (Raspberry Pi).

It was tested on 0.7.85.0 and v0.7.89.1 with Java 17 and 18.

Stacktrace:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x0000000000000000, pid=5731, tid=5761
#
# JRE version: OpenJDK Runtime Environment (17.0.9+9) (build 17.0.9+9-Debian-1deb12u1)
# Java VM: OpenJDK 64-Bit Server VM (17.0.9+9-Debian-1deb12u1, mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, linux-aarch64)
# Problematic frame:
# C  [libskiko-linux-arm64.so+0x5fe9c8]  GrGLBuffer::onUpdateData(void const*, unsigned long, unsigned long, bool)+0xc8
#
# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   https://bugs.debian.org/openjdk-17
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

---------------  S U M M A R Y ------------

Command Line: -Dcompose.application.configure.swing.globals=true -Dcompose.application.resources.dir=/home/kikermo/mainframer/Matrix8/composeApp/build/compose/tmp/prepareAppResources -Dfile.encoding=UTF-8 -Duser.country=GB -Duser.language=en -Duser.variant org.kikermo.matrix8.MainKt

Host: AArch64, 4 cores, 3G, Debian GNU/Linux 12 (bookworm)
Time: Sun Dec 10 12:12:04 2023 GMT elapsed time: 1.801942 seconds (0d 0h 0m 1s)

---------------  T H R E A D  ---------------

Current thread (0x00007fffa4590ac0):  JavaThread "AWT-EventQueue-0" [_thread_in_native, id=5761, stack(0x00007fff40250000,0x00007fff40450000)]

Stack: [0x00007fff40250000,0x00007fff40450000],  sp=0x00007fff4044ae30,  free space=2027k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libskiko-linux-arm64.so+0x5fe9c8]  GrGLBuffer::onUpdateData(void const*, unsigned long, unsigned long, bool)+0xc8
C  [libskiko-linux-arm64.so+0x5d0768]  GrBufferAllocPool::unmap()+0x164

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  org.jetbrains.skia.DirectContextKt.DirectContext_nFlush(J)V+0
j  org.jetbrains.skia.DirectContextKt.access$DirectContext_nFlush(J)V+1
j  org.jetbrains.skia.DirectContext.flush()Lorg/jetbrains/skia/DirectContext;+10
j  org.jetbrains.skiko.context.ContextHandler.flush()V+8
j  org.jetbrains.skiko.context.ContextHandler.draw()V+72
j  org.jetbrains.skiko.redrawer.LinuxOpenGLRedrawer.redrawImmediately()V+231
j  org.jetbrains.skiko.SkiaLayer.paint(Ljava/awt/Graphics;)V+102
j  androidx.compose.ui.awt.WindowComposeBridge$component$1.paint(Ljava/awt/Graphics;)V+15
j  javax.swing.JComponent.paintChildren(Ljava/awt/Graphics;)V+523 java.desktop@17.0.9
j  javax.swing.JComponent.paint(Ljava/awt/Graphics;)V+318 java.desktop@17.0.9
j  javax.swing.JLayeredPane.paint(Ljava/awt/Graphics;)V+73 java.desktop@17.0.9
j  javax.swing.JComponent.paintChildren(Ljava/awt/Graphics;)V+523 java.desktop@17.0.9
j  javax.swing.JComponent.paint(Ljava/awt/Graphics;)V+318 java.desktop@17.0.9
j  androidx.compose.ui.window.Window_desktopKt$Window$12$1.invoke(Landroidx/compose/ui/awt/ComposeWindow;)V+86
j  androidx.compose.ui.window.Window_desktopKt$Window$12$1.invoke(Ljava/lang/Object;)Ljava/lang/Object;+5
j  androidx.compose.ui.window.AwtWindow_desktopKt$AwtWindow$3.invoke()V+13
j  androidx.compose.ui.window.AwtWindow_desktopKt$AwtWindow$3.invoke()Ljava/lang/Object;+1
j  androidx.compose.ui.util.UpdateEffect_desktopKt$UpdateEffect$2$performUpdate$1.invoke()V+7
j  androidx.compose.ui.util.UpdateEffect_desktopKt$UpdateEffect$2$performUpdate$1.invoke()Ljava/lang/Object;+1
j  androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;+108
j  androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V+106
j  androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V+92
j  androidx.compose.ui.util.UpdateEffect_desktopKt$UpdateEffect$2.invoke$performUpdate(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/State;)V+38
j  androidx.compose.ui.util.UpdateEffect_desktopKt$UpdateEffect$2.invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;+59
j  androidx.compose.ui.util.UpdateEffect_desktopKt$UpdateEffect$2.invoke(Ljava/lang/Object;)Ljava/lang/Object;+5
j  androidx.compose.runtime.DisposableEffectImpl.onRemembered()V+8
j  androidx.compose.runtime.CompositionImpl$RememberEventDispatcher.dispatchRememberObservers()V+365
j  androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Ljava/util/List;)V+246
j  androidx.compose.runtime.CompositionImpl.applyChanges()V+38
j  androidx.compose.runtime.Recomposer.composeInitial$runtime(Landroidx/compose/runtime/ControlledComposition;Lkotlin/jvm/functions/Function2;)V+267
j  androidx.compose.runtime.CompositionImpl.setContent(Lkotlin/jvm/functions/Function2;)V+55
j  androidx.compose.ui.window.Application_desktopKt$awaitApplication$2$1$2.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;+89
j  kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(Ljava/lang/Object;)V+44
j  kotlinx.coroutines.DispatchedTask.run()V+317
j  java.awt.event.InvocationEvent.dispatch()V+47 java.desktop@17.0.9
j  java.awt.EventQueue.dispatchEventImpl(Ljava/awt/AWTEvent;Ljava/lang/Object;)V+21 java.desktop@17.0.9
j  java.awt.EventQueue$4.run()Ljava/lang/Void;+32 java.desktop@17.0.9
j  java.awt.EventQueue$4.run()Ljava/lang/Object;+1 java.desktop@17.0.9
j  java.security.AccessController.executePrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/lang/Class;)Ljava/lang/Object;+29 java.base@17.0.9
j  java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;+13 java.base@17.0.9
j  java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object;+18 java.base@17.0.9
j  java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+46 java.desktop@17.0.9
j  java.awt.EventDispatchThread.pumpOneEventForFilters(I)V+78 java.desktop@17.0.9
j  java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+35 java.desktop@17.0.9
j  java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11 java.desktop@17.0.9
j  java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4 java.desktop@17.0.9
j  java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3 java.desktop@17.0.9
j  java.awt.EventDispatchThread.run()V+9 java.desktop@17.0.9
v  ~StubRoutines::call_stub

siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000

About this issue

  • Original URL
  • State: open
  • Created 7 months ago
  • Reactions: 2
  • Comments: 21 (9 by maintainers)

Most upvoted comments

@kikermo Seems like this helped me: https://github.com/JetBrains/skiko/issues/649 (For the Compose Multiplatform at least but worth a try for your case as well!)