Open
Description
Platforms
Android
Version of flutter maplibre_gl
0.21.0
Bug Description
When using addHeatMapLayer
, the application crash.
It works fine on 0.19.2, the crash starts to happen after upgrading pass that version
Relevant logs
W/Mbgl (23483): {TextureViewRend}[ParseStyle]: Layer 'OSgZPbZL6Y_0' has an invalid value for text-font and will not render text. Output values must be contained as literals within the expression.
E/FrameEvents(23483): updateAcquireFence: Did not find frame.
F/libc (23483): Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x2827b710e11041 in tid 24098 (TextureViewRend), pid 23483 (an.immich.debug)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'samsung/dm1quew/dm1q:14/UP1A.231005.007/S911U1UEU5CYB2:user/release-keys'
Revision: '13'
ABI: 'arm64'
Processor: '5'
Timestamp: 2025-03-08 14:59:46.104907081-0600
Process uptime: 247s
Cmdline: app.alextran.immich.debug
pid: 23483, tid: 24098, name: TextureViewRend >>> app.alextran.immich.debug <<<
uid: 10440
tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY)
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x002827b710e11041
x0 0002827b710e1105 x1 0000006f27afb264 x2 0000000000000f9b x3 61702d6c61796572
x4 61702d6c61796572 x5 726579616c2d7061 x6 726579616c2d7061 x7 b400006f449e9394
x8 05ee058e05fe0500 x9 0000000000000019 x10 000504f6e21c2208 x11 000504f6e21c2208
x12 0000000000000001 x13 0000000000000000 x14 0000000000000000 x15 0000000000000000
x16 0000000000000000 x17 0000000000000000 x18 0000006f1bd4e000 x19 0000006f27afb260
x20 b400007045023c70 x21 0000006f27afc000 x22 0000000000000002 x23 b400006f3e3abd18
x24 b400006f93de2000 x25 b400006f3fadb600 x26 b400006f3e42ac80 x27 b400006f93e5a500
x28 b400006f3fab9c0c x29 0000006f27afb060
lr 0000006f21f727bc sp 0000006f27afb050 pc 0000006f21f72804 pst 0000000080001000
18 total frames
backtrace:
#00 pc 000000000065f804 /data/app/~~59nVvyvzogBLGyf0voHhbA==/app.alextran.immich.debug-ELY2B9_t710mMwZxD6yGgg==/base.apk!libmaplibre.so (offset 0x3e2c000) (BuildId: ecec6e21f8a31a1886cad753bc6dea202d2bbebe)
#01 pc 0000000000683208 /data/app/~~59nVvyvzogBLGyf0voHhbA==/app.alextran.immich.debug-ELY2B9_t710mMwZxD6yGgg==/base.apk!libmaplibre.so (offset 0x3e2c000) (BuildId: ecec6e21f8a31a1886cad753bc6dea202d2bbebe)
#02 pc 00000000006c1588 /data/app/~~59nVvyvzogBLGyf0voHhbA==/app.alextran.immich.debug-ELY2B9_t710mMwZxD6yGgg==/base.apk!libmaplibre.so (offset 0x3e2c000) (BuildId: ecec6e21f8a31a1886cad753bc6dea202d2bbebe)
#03 pc 00000000006d551c /data/app/~~59nVvyvzogBLGyf0voHhbA==/app.alextran.immich.debug-ELY2B9_t710mMwZxD6yGgg==/base.apk!libmaplibre.so (offset 0x3e2c000) (BuildId: ecec6e21f8a31a1886cad753bc6dea202d2bbebe)
#04 pc 00000000006d42f0 /data/app/~~59nVvyvzogBLGyf0voHhbA==/app.alextran.immich.debug-ELY2B9_t710mMwZxD6yGgg==/base.apk!libmaplibre.so (offset 0x3e2c000) (BuildId: ecec6e21f8a31a1886cad753bc6dea202d2bbebe)
#05 pc 00000000004e26a8 /data/app/~~59nVvyvzogBLGyf0voHhbA==/app.alextran.immich.debug-ELY2B9_t710mMwZxD6yGgg==/base.apk!libmaplibre.so (offset 0x3e2c000) (mbgl::android::MapRenderer::render(_JNIEnv&)+216) (BuildId: ecec6e21f8a31a1886cad753bc6dea202d2bbebe)
#06 pc 00000000004e58b8 /data/app/~~59nVvyvzogBLGyf0voHhbA==/app.alextran.immich.debug-ELY2B9_t710mMwZxD6yGgg==/base.apk!libmaplibre.so (offset 0x3e2c000) (auto auto jni::MakeNativeMethod<auto jni::NativeMethodMaker<void (auto jni::NativePeerMemberFunctionMethod<void (mbgl::android::MapRenderer::*)(_JNIEnv&), &(mbgl::android::MapRenderer::render(_JNIEnv&))>::operator()<mbgl::android::MapRenderer, mbgl::android::MapRenderer, void>(jni::Field<mbgl::android::MapRenderer, long> const&)::'lambda'(_JNIEnv&, jni::Object<mbgl::android::MapRenderer>&)::*)(_JNIEnv&, jni::Object<mbgl::android::MapRenderer>&) const>::operator()<auto jni::NativePeerMemberFunctionMethod<void (mbgl::android::MapRenderer::*)(_JNIEnv&), &(mbgl::android::MapRenderer::render(_JNIEnv&))>::operator()<mbgl::android::MapRenderer, mbgl::android::MapRenderer, void>(jni::Field<mbgl::android::MapRenderer, long> const&)::'lambda'(_JNIEnv&, jni::Object<mbgl::android::MapRenderer>&)>(char const*, auto jni::NativePeerMemberFunctionMethod<void (mbgl::android::MapRenderer::*)(_JNIEnv&), &(mbgl::android::MapRenderer::render(_JNIEnv&))>::operator()<mbgl::android::MapRenderer, mbgl::android::MapRenderer, void>(jni::Field<mbgl::android::MapRenderer, long> const&)::'lambda'(_JNIEnv&, jni::Object<mbgl::android::MapRenderer>&) const&)::'lambda'(_JNIEnv*, jni::jobject*)>(char const*, char const*, auto jni::NativePeerMemberFunctionMethod<void (mbgl::android::MapRenderer::*)(_JNIEnv&), &(mbgl::android::MapRenderer::render(_JNIEnv&))>::operator()<mbgl::android::MapRenderer, mbgl::android::MapRenderer, void>(jni::Field<mbgl::android::MapRenderer, long> const&)::'lambda'(_JNIEnv&, jni::Object<mbgl::android::MapRenderer>&) const&, std::__ndk1::enable_if<std::is_class<auto jni::NativePeerMemberFunctionMethod<void (mbgl::android::MapRenderer::*)(_JNIEnv&), &(mbgl::android::MapRenderer::render(_JNIEnv&))>::operator()<mbgl::android::MapRenderer, mbgl::android::MapRenderer, void>(jni::Field<mbgl::android::MapRenderer, long> const&)::'lambda'(_JNIEnv&, jni::Object<mbgl::android::MapRenderer>&)>::value, void>::type*)::'lambda'(_JNIEnv*, auto...)::__invoke<jni::jobject*>(_JNIEnv*, auto...)+44) (BuildId: ecec6e21f8a31a1886cad753bc6dea202d2bbebe)
#07 pc 000000000037ef70 /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+144) (BuildId: 629e0ffca501d809c29dbbeef2f512d3)
#08 pc 00000000025b79fc /memfd:jit-cache (deleted) (offset 0x2000000) (org.maplibre.android.maps.renderer.MapRenderer.onDrawFrame+156)
#09 pc 00000000025cfe4c /memfd:jit-cache (deleted) (offset 0x2000000) (org.maplibre.android.maps.renderer.textureview.TextureViewMapRenderer.onDrawFrame+108)
#10 pc 00000000024d184c /memfd:jit-cache (deleted) (offset 0x2000000) (org.maplibre.android.maps.renderer.textureview.GLTextureViewRenderThread.run+1180)
#11 pc 0000000000368774 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: 629e0ffca501d809c29dbbeef2f512d3)
#12 pc 0000000000353f04 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+132) (BuildId: 629e0ffca501d809c29dbbeef2f512d3)
#13 pc 0000000000947a48 /apex/com.android.art/lib64/libart.so (_ZN3art9ArtMethod14InvokeInstanceILc86ETpTncJEEENS_6detail12ShortyTraitsIXT_EE4TypeEPNS_6ThreadENS_6ObjPtrINS_6mirror6ObjectEEEDpNS3_IXT0_EE4TypeE+60) (BuildId: 629e0ffca501d809c29dbbeef2f512d3)
#14 pc 000000000061afcc /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1344) (BuildId: 629e0ffca501d809c29dbbeef2f512d3)
#15 pc 000000000061aa7c /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallbackWithUffdGc(void*)+8) (BuildId: 629e0ffca501d809c29dbbeef2f512d3)
#16 pc 00000000000fd254 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208) (BuildId: 8aaf102cfbdac2f120bf95c648547386)
#17 pc 0000000000096a04 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68) (BuildId: 8aaf102cfbdac2f120bf95c648547386)
Lost connection to device.
Steps to Reproduce
- Checkout this PR chore(mobile): upgrade maplibre immich-app/immich#16739
- Uncomment line 57-61 in this file
mobile/lib/extensions/maplibrecontroller_extensions.dart
- Run and build the application debug mode
- When entering the application, double tap on the spinning flower logo to populate the credential of the test instance, or entering the following information
URL: https://demo.immich.app
email: [email protected]
password: demo
- Go to
Library > Places > Click on map
, the application should crash, if it doesn't navigate back and then reenter the map
Expected Results
Doesn't crash
Actual Results
Crash
Code Sample
Future<void> reloadAllLayersForMarkers(List<MapMarker> markers) async {
// Wait for previous reload to complete
if (!_completer.isCompleted) {
return _completer.future;
}
_completer = Completer();
// !! Make sure to remove layers before sources else the native
// maplibre library would crash when removing the source saying that
// the source is still in use
final existingLayers = await getLayerIds();
if (existingLayers.contains(MapUtils.defaultHeatMapLayerId)) {
await removeLayer(MapUtils.defaultHeatMapLayerId);
}
final existingSources = await getSourceIds();
if (existingSources.contains(MapUtils.defaultSourceId)) {
await removeSource(MapUtils.defaultSourceId);
}
await addGeoJSONSourceForMarkers(markers);
await addHeatmapLayer(
MapUtils.defaultSourceId,
MapUtils.defaultHeatMapLayerId,
MapUtils.defaultHeatMapLayerProperties,
);
_completer.complete();
}