diff options
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java | 2 | ||||
-rwxr-xr-x | platform/android/src/jni.cpp | 9 |
2 files changed, 8 insertions, 3 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java index 0f05549338..d3100b3424 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java @@ -222,6 +222,8 @@ public class OfflineRegion { * * When the operation is complete or encounters an error, the given callback will be * executed on the main thread. + * + * After you call this method, you may not call any additional methods on this object. */ public void delete(@NonNull final OfflineRegionDeleteCallback callback) { deleteOfflineRegion(this, new OfflineRegionDeleteCallback() { diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index 1d8b1fe175..fcf1b48622 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -1474,16 +1474,18 @@ void destroyOfflineRegion(JNIEnv *env, jni::jobject* offlineRegion_, jlong) { // Offline region jlong offlineRegionPtr = jni::GetField<jlong>(*env, offlineRegion_, *offlineRegionPtrId); - mbgl::OfflineRegion *offlineRegion = reinterpret_cast<mbgl::OfflineRegion *>(offlineRegionPtr); + if (!offlineRegionPtr) { + return; // Already deleted + } // File source jni::jobject* jmanager = jni::GetField<jni::jobject*>(*env, offlineRegion_, *offlineRegionOfflineManagerId); jlong defaultFileSourcePtr = jni::GetField<jlong>(*env, jmanager, *offlineManagerClassPtrId); mbgl::DefaultFileSource *defaultFileSource = reinterpret_cast<mbgl::DefaultFileSource *>(defaultFileSourcePtr); - // Release the observer + // Release the observer and delete the region + mbgl::OfflineRegion *offlineRegion = reinterpret_cast<mbgl::OfflineRegion *>(offlineRegionPtr); defaultFileSource->setOfflineRegionObserver(*offlineRegion, nullptr); - delete offlineRegion; } @@ -1698,6 +1700,7 @@ void deleteOfflineRegion(JNIEnv *env, jni::jobject* obj, jni::jobject* offlineRe deleteCallback = jni::NewGlobalRef(*env, deleteCallback).release(); // Set new state + jni::SetField<jlong>(*env, offlineRegion_, *offlineRegionPtrId, 0); defaultFileSource->deleteOfflineRegion(std::move(*offlineRegion), [deleteCallback](std::exception_ptr error) mutable { // Reattach, the callback comes from a different thread |