mapbox-gl-native-android
mapbox-gl-native-android copied to clipboard
NPE in JNI geojson converions
While executing a navigation example I run into:
2020-01-18 18:50:16.076 18929-18929/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2020-01-18 18:50:16.076 18929-18929/? A/DEBUG: Build fingerprint: 'google/taimen/taimen:10/QQ1A.191205.008/5974827:user/release-keys'
2020-01-18 18:50:16.076 18929-18929/? A/DEBUG: Revision: 'rev_10'
2020-01-18 18:50:16.076 18929-18929/? A/DEBUG: ABI: 'arm64'
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: Timestamp: 2020-01-18 16:50:16+0100
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: pid: 17218, tid: 17359, name: Worker 1 >>> com.mapbox.logistics_example <<<
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: uid: 10695
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: Abort message: 'JNI DETECTED ERROR IN APPLICATION: can't call java.lang.String com.mapbox.geojson.GeoJson.type() on null object
in call to CallObjectMethodV'
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: x0 0000000000000000 x1 00000000000043cf x2 0000000000000006 x3 00000073f9b03cc0
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: x4 fefeff73e6189f97 x5 fefeff73e6189f97 x6 fefeff73e6189f97 x7 7f7f7f7fff7fffff
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: x8 00000000000000f0 x9 00000074e66c14e0 x10 0000000000000000 x11 0000000000000001
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: x12 00000000d196fbb8 x13 ffffffffffffffff x14 0000000000000000 x15 ffffffffffffffff
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: x16 00000074e678d8c0 x17 00000074e676b060 x18 00000073d71de000 x19 00000000000000ac
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: x20 0000000000004342 x21 00000000000000b2 x22 00000000000043cf x23 00000000ffffffff
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: x24 00000073f9b05020 x25 0000000000000012 x26 0000000000000005 x27 00000074638ba555
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: x28 00000074638dc012 x29 00000073f9b03d70
2020-01-18 18:50:16.078 18929-18929/? A/DEBUG: sp 00000073f9b03ca0 lr 00000074e671f170 pc 00000074e671f1a0
2020-01-18 18:50:16.083 18929-18929/? A/DEBUG: backtrace:
2020-01-18 18:50:16.083 18929-18929/? A/DEBUG: #00 pc 00000000000821a0 /apex/com.android.runtime/lib64/bionic/libc.so (abort+176) (BuildId: b58d049709674405423a8d8de1a37f56)
2020-01-18 18:50:16.083 18929-18929/? A/DEBUG: #01 pc 00000000004b9224 /apex/com.android.runtime/lib64/libart.so (art::Runtime::Abort(char const*)+2172) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
2020-01-18 18:50:16.083 18929-18929/? A/DEBUG: #02 pc 000000000000c650 /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+608) (BuildId: c3c47739a59353da1b74002a20814c24)
2020-01-18 18:50:16.083 18929-18929/? A/DEBUG: #03 pc 0000000000377c5c /apex/com.android.runtime/lib64/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+1604) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
2020-01-18 18:50:16.083 18929-18929/? A/DEBUG: #04 pc 0000000000377e1c /apex/com.android.runtime/lib64/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+108) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
2020-01-18 18:50:16.083 18929-18929/? A/DEBUG: #05 pc 000000000036a1e0 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::AbortF(char const*, ...)+136) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #06 pc 000000000036d730 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::CheckMethodAndSig(art::ScopedObjectAccess&, _jobject*, _jclass*, _jmethodID*, art::Primitive::Type, art::InvokeType)+1384) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #07 pc 000000000036c020 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType)+736) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #08 pc 0000000000359bb0 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallObjectMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+72) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #09 pc 000000000008936c /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #10 pc 000000000026f110 /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #11 pc 0000000000297c9c /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #12 pc 000000000029637c /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #13 pc 0000000000121fec /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #14 pc 0000000000259a38 /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #15 pc 00000000000e2364 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: b58d049709674405423a8d8de1a37f56)
2020-01-18 18:50:16.084 18929-18929/? A/DEBUG: #16 pc 0000000000083d98 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: b58d049709674405423a8d8de1a37f56)
on Maps version 8.5.2.
@pengdev I know you had no issues symbolicating the traces on your machine (I'm unable to do it) - could you try with the above tombstone to give us a clear stack trace? I'm going to guess that Navigation SDK is possibly is passing a null feature from somewhere, but if we have the stack, we can narrow down the investigation, or maybe patch up the Maps SDK.
/cc @mapbox/navigation-android
@LukasPaczos Here it is:
********** Crash dump: **********
Build fingerprint: 'google/taimen/taimen:10/QQ1A.191205.008/5974827:user/release-keys'
Abort message: 'JNI DETECTED ERROR IN APPLICATION: can't call java.lang.String com.mapbox.geojson.GeoJson.type() on null object
#00 0x00000000000821a0 /apex/com.android.runtime/lib64/bionic/libc.so (abort+176) (BuildId: b58d049709674405423a8d8de1a37f56)
#01 0x00000000004b9224 /apex/com.android.runtime/lib64/libart.so (art::Runtime::Abort(char const*)+2172) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
#02 0x000000000000c650 /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+608) (BuildId: c3c47739a59353da1b74002a20814c24)
#03 0x0000000000377c5c /apex/com.android.runtime/lib64/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+1604) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
#04 0x0000000000377e1c /apex/com.android.runtime/lib64/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+108) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
#05 0x000000000036a1e0 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::AbortF(char const*, ...)+136) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
#06 0x000000000036d730 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::CheckMethodAndSig(art::ScopedObjectAccess&, _jobject*, _jclass*, _jmethodID*, art::Primitive::Type, art::InvokeType)+1384) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
#07 0x000000000036c020 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType)+736) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
#08 0x0000000000359bb0 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallObjectMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+72) (BuildId: a2d27163b21dccb407d00dc2f85709a8)
#09 0x000000000008936c /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
_JNIEnv::CallObjectMethod(_jobject*, _jmethodID*, ...)
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/jni.h:618:145
#10 0x000000000026f110 /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
std::__ndk1::enable_if<!(std::is_void<jni::jobject*>::value), jni::jobject*>::type jni::CallMethod<jni::jobject*>(_JNIEnv&, jni::jobject*, _jmethodID&)
/src/vendor/mapbox-gl-native/next/vendor/mapbox-base/mapbox/jni.hpp/include/jni/functions.hpp:271:21
std::__ndk1::enable_if<((!(IsPrimitive<jni::Object<jni::StringTag> >::value)) && (!(std::is_void<jni::Object<jni::StringTag> >::value))) && (Conjunction<>::value), jni::Unique<jni::Object<jni::StringTag>, jni::DefaultRefDeleter<&(_JNIEnv::DeleteLocalRef(_jobject*))> > >::type jni::Object<mbgl::android::geojson::Geometry>::Call<jni::Object<jni::StringTag> >(_JNIEnv&, jni::Method<mbgl::android::geojson::Geometry, jni::Object<jni::StringTag> ()> const&) const
/src/vendor/mapbox-gl-native/next/vendor/mapbox-base/mapbox/jni.hpp/include/jni/object.hpp:109:0
mbgl::android::geojson::Geometry::getType(_JNIEnv&, jni::Object<mbgl::android::geojson::Geometry> const&)
/src/vendor/mapbox-gl-native/platform/android/src/geojson/geometry.cpp:88:0
mbgl::android::geojson::Geometry::convert(_JNIEnv&, jni::Object<mbgl::android::geojson::Geometry> const&)
/src/vendor/mapbox-gl-native/platform/android/src/geojson/geometry.cpp:65:0
#11 0x0000000000297c9c /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
void mbgl::android::FeatureConverter::convertObject<mbgl::android::geojson::Geometry>(std::__ndk1::shared_ptr<jni::Unique<jni::Object<mbgl::android::geojson::Geometry>, jni::EnvAttachingDeleter<&(_JNIEnv::DeleteGlobalRef(_jobject*))> > >, mbgl::ActorRef<std::__ndk1::function<void (mapbox::util::variant<mapbox::geometry::geometry<double, std::__ndk1::vector>, mapbox::feature::feature<double>, mapbox::feature::feature_collection<double, std::__ndk1::vector> >)> >)
/src/vendor/mapbox-gl-native/platform/android/src/style/sources/geojson_source.cpp:256:25
#12 0x000000000029637c /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
void mbgl::MessageImpl<mbgl::android::FeatureConverter, void (mbgl::android::FeatureConverter::*)(std::__ndk1::shared_ptr<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > >, mbgl::ActorRef<std::__ndk1::function<void (mapbox::util::variant<mapbox::geometry::geometry<double, std::__ndk1::vector>, mapbox::feature::feature<double>, mapbox::feature::feature_collection<double, std::__ndk1::vector> >)> >), std::__ndk1::tuple<std::__ndk1::shared_ptr<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > >, mbgl::ActorRef<std::__ndk1::function<void (mapbox::util::variant<mapbox::geometry::geometry<double, std::__ndk1::vector>, mapbox::feature::feature<double>, mapbox::feature::feature_collection<double, std::__ndk1::vector> >)> > > >::invoke<0ul, 1ul>(std::__ndk1::integer_sequence<unsigned long, 0ul, 1ul>)
/src/vendor/mapbox-gl-native/next/../include/mbgl/actor/message.hpp:34:9
mbgl::MessageImpl<mbgl::android::FeatureConverter, void (mbgl::android::FeatureConverter::*)(std::__ndk1::shared_ptr<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > >, mbgl::ActorRef<std::__ndk1::function<void (mapbox::util::variant<mapbox::geometry::geometry<double, std::__ndk1::vector>, mapbox::feature::feature<double>, mapbox::feature::feature_collection<double, std::__ndk1::vector> >)> >), std::__ndk1::tuple<std::__ndk1::shared_ptr<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > >, mbgl::ActorRef<std::__ndk1::function<void (mapbox::util::variant<mapbox::geometry::geometry<double, std::__ndk1::vector>, mapbox::feature::feature<double>, mapbox::feature::feature_collection<double, std::__ndk1::vector> >)> > > >::operator()()
/src/vendor/mapbox-gl-native/next/../include/mbgl/actor/message.hpp:29:0
#13 0x0000000000121fec /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
mbgl::Mailbox::receive()
/src/vendor/mapbox-gl-native/src/mbgl/actor/mailbox.cpp:84:5
mbgl::Mailbox::maybeReceive(std::__ndk1::weak_ptr<mbgl::Mailbox>)
/src/vendor/mapbox-gl-native/src/mbgl/actor/mailbox.cpp:94:0
mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0::operator()() const
/src/vendor/mapbox-gl-native/src/mbgl/actor/mailbox.cpp:100:0
decltype(std::__ndk1::forward<mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0&>(fp)()) std::__ndk1::__invoke<mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0&>(mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0&)
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/type_traits:4353:0
void std::__ndk1::__invoke_void_return_wrapper<void>::__call<mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0&>(mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0&)
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__functional_base:349:0
std::__ndk1::__function::__alloc_func<mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0, std::__ndk1::allocator<mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0>, void ()>::operator()()
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/functional:1527:0
std::__ndk1::__function::__func<mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0, std::__ndk1::allocator<mbgl::Mailbox::makeClosure(std::__ndk1::weak_ptr<mbgl::Mailbox>)::$_0>, void ()>::operator()()
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/functional:1651:0
#14 0x0000000000259a38 /data/app/com.mapbox.logistics_example-7bJCOhLgxjuKSJ-YgqHVXQ==/lib/arm64/libmapbox-gl.so (BuildId: 6fe1e2a2391d93dfcd25b63e1ab21bbd1db9246c)
std::__ndk1::__function::__value_func<void ()>::operator()() const
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/functional:1799:16
std::__ndk1::function<void ()>::operator()() const
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/functional:2347:0
mbgl::ThreadedSchedulerBase::makeSchedulerThread(unsigned long)::$_0::operator()() const
/src/vendor/mapbox-gl-native/src/mbgl/util/thread_pool.cpp:37:0
decltype(std::__ndk1::forward<mbgl::ThreadedSchedulerBase::makeSchedulerThread(unsigned long)::$_0>(fp)()) std::__ndk1::__invoke<mbgl::ThreadedSchedulerBase::makeSchedulerThread(unsigned long)::$_0>(mbgl::ThreadedSchedulerBase::makeSchedulerThread(unsigned long)::$_0&&)
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/type_traits:4353:0
void std::__ndk1::__thread_execute<std::__ndk1::unique_ptr<std::__ndk1::__thread_struct, std::__ndk1::default_delete<std::__ndk1::__thread_struct> >, mbgl::ThreadedSchedulerBase::makeSchedulerThread(unsigned long)::$_0>(std::__ndk1::tuple<std::__ndk1::unique_ptr<std::__ndk1::__thread_struct, std::__ndk1::default_delete<std::__ndk1::__thread_struct> >, mbgl::ThreadedSchedulerBase::makeSchedulerThread(unsigned long)::$_0>&, std::__ndk1::__tuple_indices<>)
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/thread:342:0
void* std::__ndk1::__thread_proxy<std::__ndk1::tuple<std::__ndk1::unique_ptr<std::__ndk1::__thread_struct, std::__ndk1::default_delete<std::__ndk1::__thread_struct> >, mbgl::ThreadedSchedulerBase::makeSchedulerThread(unsigned long)::$_0> >(void*)
/android/sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/thread:352:0
#15 0x00000000000e2364 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: b58d049709674405423a8d8de1a37f56)
#16 0x0000000000083d98 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: b58d049709674405423a8d8de1a37f56)
Awesome, thank you @pengdev!
I was able to narrow it down and the Navigation SDK was indeed passing a null geometry.
To make the usability of GeoJsonSource better, would we like to annotate with @NonNull or rather null-check the geometries to not break kotlin builds?
This issue has been automatically detected as stale because it has not had recent activity and will be archived. Thank you for your contributions.