diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-03-10 14:03:04 -0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-04-06 04:52:51 -0300 |
commit | 10b503eabfb3c0c53b9a4bef8849f2511ae0ac16 (patch) | |
tree | 5b46f173fb4b6b021f5c4ff00b0c91eec8285c41 | |
parent | 74a1d3c1641673409a7058869249cf260870b9c0 (diff) | |
download | qtlocation-mapboxgl-10b503eabfb3c0c53b9a4bef8849f2511ae0ac16.tar.gz |
[android] Attach thread on the RunLoop
Needed because Looper could be used by Java and it would crash
complaining that we didn't detach otherwise.
-rw-r--r-- | platform/android/src/run_loop.cpp | 7 | ||||
-rw-r--r-- | platform/android/src/run_loop_impl.hpp | 5 |
2 files changed, 12 insertions, 0 deletions
diff --git a/platform/android/src/run_loop.cpp b/platform/android/src/run_loop.cpp index b3b1fd2d95..e05d27a088 100644 --- a/platform/android/src/run_loop.cpp +++ b/platform/android/src/run_loop.cpp @@ -1,5 +1,6 @@ #include "run_loop_impl.hpp" +#include <mbgl/util/thread_context.hpp> #include <mbgl/util/thread_local.hpp> #include <android/looper.h> @@ -74,6 +75,9 @@ RunLoop* RunLoop::Get() { } RunLoop::RunLoop(Type) : impl(std::make_unique<Impl>()) { + using namespace mbgl::android; + impl->detach = attach_jni_thread(theJVM, &impl->env, ThreadContext::getName()); + impl->loop = ALooper_prepare(0); assert(impl->loop); @@ -86,6 +90,9 @@ RunLoop::~RunLoop() { current.set(nullptr); ALooper_release(impl->loop); + + using namespace mbgl::android; + detach_jni_thread(theJVM, &impl->env, impl->detach); } LOOP_HANDLE RunLoop::getLoopHandle() { diff --git a/platform/android/src/run_loop_impl.hpp b/platform/android/src/run_loop_impl.hpp index a96ea1a1c9..2dd912994f 100644 --- a/platform/android/src/run_loop_impl.hpp +++ b/platform/android/src/run_loop_impl.hpp @@ -1,5 +1,7 @@ #pragma once +#include "jni.hpp" + #include <mbgl/util/chrono.hpp> #include <mbgl/util/run_loop.hpp> @@ -34,6 +36,9 @@ public: private: friend RunLoop; + JNIEnv *env = nullptr; + bool detach = false; + ALooper* loop = nullptr; std::atomic<bool> running; |