diff options
author | Leith Bade <leith@mapbox.com> | 2015-09-17 17:34:13 -0700 |
---|---|---|
committer | Leith Bade <leith@mapbox.com> | 2015-09-23 11:57:41 +1000 |
commit | 8cf927f6c423ad5e5ce9c8931002ee1c1dce1d9d (patch) | |
tree | e05585e9b5268d6d9d84f40f7503d8dfcfbda953 /android | |
parent | db6a08d8caef8818032a89725340419f258d09ea (diff) | |
download | qtlocation-mapboxgl-8cf927f6c423ad5e5ce9c8931002ee1c1dce1d9d.tar.gz |
Improve handling of cancelled HTTP requests
Fix a memory leak of NativeMapView Java object
Diffstat (limited to 'android')
-rw-r--r-- | android/cpp/native_map_view.cpp | 4 | ||||
-rw-r--r-- | android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/http/HTTPContext.java | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/android/cpp/native_map_view.cpp b/android/cpp/native_map_view.cpp index 02228d85b6..6c1cd87bb2 100644 --- a/android/cpp/native_map_view.cpp +++ b/android/cpp/native_map_view.cpp @@ -73,7 +73,7 @@ NativeMapView::NativeMapView(JNIEnv *env, jobject obj_, float pixelRatio_, int a return; } - obj = env->NewGlobalRef(obj_); + obj = env->NewWeakGlobalRef(obj_); if (obj == nullptr) { env->ExceptionDescribe(); return; @@ -93,7 +93,7 @@ NativeMapView::~NativeMapView() { JNIEnv *env = nullptr; ret = vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6); if (ret == JNI_OK) { - env->DeleteGlobalRef(obj); + env->DeleteWeakGlobalRef(obj); } else { mbgl::Log::Error(mbgl::Event::JNI, "GetEnv() failed with %i", ret); throw new std::runtime_error("GetEnv() failed"); diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/http/HTTPContext.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/http/HTTPContext.java index 4558bbfe34..775daaafdd 100644 --- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/http/HTTPContext.java +++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/http/HTTPContext.java @@ -20,6 +20,7 @@ class HTTPContext { private static final int CONNECTION_ERROR = 0; private static final int TEMPORARY_ERROR = 1; private static final int PERMANENT_ERROR = 2; + private static final int CANCELED_ERROR = 3; private static HTTPContext mInstance = null; @@ -78,7 +79,10 @@ class HTTPContext { type = CONNECTION_ERROR; } else if ((e instanceof InterruptedIOException)) { type = TEMPORARY_ERROR; + } else if (mCall.isCanceled()) { + type = CANCELED_ERROR; } + nativeOnFailure(mNativePtr, type, e.getMessage()); } |