From bdc231db9485399c01597fceeccbd549f29137b1 Mon Sep 17 00:00:00 2001 From: Antonio Zugaldia Date: Thu, 21 Jul 2016 09:53:24 -0400 Subject: [PATCH] [android] Create a new local reference frame in JNI listOfflineRegions Fixes #5629 --- platform/android/src/jni.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index 7c5694153..c9670bfcb 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* 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(*env2, jregion, *offlineRegionOfflineManagerId, obj); jni::SetField(*env2, jregion, *offlineRegionIdId, region.getID()); - // Definition object mbgl::OfflineTilePyramidRegionDefinition definition = region.getDefinition(); jni::jobject* jdefinition = &jni::NewObject(*env2, *offlineRegionDefinitionClass, *offlineRegionDefinitionConstructorId);