summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorAntonio Zugaldia <antonio@mapbox.com>2016-07-21 09:53:24 -0400
committerAntonio Zugaldia <antonio@mapbox.com>2016-07-25 13:19:46 -0400
commitbdc231db9485399c01597fceeccbd549f29137b1 (patch)
treea0b47191fdf70f65522d618a9f5d12a20b66f443 /platform
parent154d771220533e2674c9fcf3cc6241f950882794 (diff)
downloadqtlocation-mapboxgl-bdc231db9485399c01597fceeccbd549f29137b1.tar.gz
[android] Create a new local reference frame in JNI listOfflineRegions
Fixes #5629
Diffstat (limited to 'platform')
-rwxr-xr-xplatform/android/src/jni.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp
index 7c5694153c..c9670bfcb9 100755
--- a/platform/android/src/jni.cpp
+++ b/platform/android/src/jni.cpp
@@ -1142,12 +1142,15 @@ void listOfflineRegions(JNIEnv *env, jni::jobject* obj, jlong defaultFileSourceP
std::size_t index = 0;
jni::jarray<jni::jobject>* jregions = &jni::NewObjectArray(*env2, regions->size(), *offlineRegionClass, NULL);
for (auto& region : *regions) {
+ // Create a new local reference frame (capacity 2 for the NewObject allocations below)
+ // to avoid a local reference table overflow (#5629)
+ jni::UniqueLocalFrame frame = jni::PushLocalFrame(*env2, 2);
+
// Build the Region object
jni::jobject* jregion = &jni::NewObject(*env2, *offlineRegionClass, *offlineRegionConstructorId);
jni::SetField<jni::jobject*>(*env2, jregion, *offlineRegionOfflineManagerId, obj);
jni::SetField<jlong>(*env2, jregion, *offlineRegionIdId, region.getID());
-
// Definition object
mbgl::OfflineTilePyramidRegionDefinition definition = region.getDefinition();
jni::jobject* jdefinition = &jni::NewObject(*env2, *offlineRegionDefinitionClass, *offlineRegionDefinitionConstructorId);