Browse Source

attempt to fix bug reoported on playstore 'JNI ERROR (app bug): local reference table overflow (max=512)'

JNI-44
Edouard Tisserant 9 years ago
parent
commit
f4aa4b59e0
  1. 29
      src/jniutils.cc

29
src/jniutils.cc

@ -66,6 +66,8 @@ namespace pEp {
throw std::invalid_argument(std::string(fieldname));
}
env->DeleteLocalRef(clazz);
return field;
}
@ -86,6 +88,8 @@ namespace pEp {
throw std::invalid_argument(std::string(methodname));
}
env->DeleteLocalRef(clazz);
return env->CallIntMethod(obj, method);
}
@ -106,6 +110,8 @@ namespace pEp {
throw std::invalid_argument(std::string(methodname));
}
env->DeleteLocalRef(clazz);
return env->CallLongMethod(obj, method);
}
@ -128,6 +134,8 @@ namespace pEp {
throw std::invalid_argument(std::string(methodname));
}
env->DeleteLocalRef(clazz);
return env->CallObjectMethod(obj, method, index);
}
@ -150,6 +158,8 @@ namespace pEp {
throw std::invalid_argument(std::string(methodname));
}
env->DeleteLocalRef(clazz);
return env->CallBooleanMethod(obj, method, o);
}
@ -208,6 +218,8 @@ namespace pEp {
callBooleanMethod(env, obj, "add", o);
}
env->DeleteLocalRef(clazz);
return obj;
}
@ -262,6 +274,9 @@ namespace pEp {
callBooleanMethod(env, obj, "add", pair);
}
env->DeleteLocalRef(clazz);
env->DeleteLocalRef(clazz_pair);
return obj;
}
@ -321,6 +336,9 @@ namespace pEp {
jclass clazz = findClass(env, "java/util/Date");
jmethodID constructor = env->GetMethodID(clazz, "<init>", "(J)V");
assert(constructor);
env->DeleteLocalRef(clazz);
return env->NewObject(clazz, constructor, (jlong) t);
}
@ -371,6 +389,8 @@ namespace pEp {
jmethodID constructor = env->GetMethodID(clazz, "<init>", "()V");
assert(constructor);
jobject obj = env->NewObject(clazz, constructor);
env->DeleteLocalRef(clazz);
if (ident) {
_setStringField(env, classname, obj, "address", ident->address);
@ -385,6 +405,7 @@ namespace pEp {
jfieldID me_id = getFieldID(env, classname, "me", "Z");
env->SetBooleanField(obj, me_id, (jboolean) ident->me);
}
return obj;
@ -397,6 +418,7 @@ namespace pEp {
jbyteArray field =
reinterpret_cast<jbyteArray>(env->GetObjectField(obj,
fieldID));
return to_string(env, field);
}
@ -446,6 +468,8 @@ namespace pEp {
callBooleanMethod(env, obj, "add", o);
}
env->DeleteLocalRef(clazz);
return obj;
}
@ -481,11 +505,12 @@ namespace pEp {
assert(constructor);
jobject obj = env->NewObject(clazz, constructor);
env->DeleteLocalRef(clazz);
jfieldID fieldID = getFieldID(env, classname, "data", "[B");
jbyteArray _data = env->NewByteArray((jsize) b->size);
env->SetByteArrayRegion(_data, 0, b->size, (jbyte*)b->value);
env->SetObjectField(obj, fieldID, reinterpret_cast<jobject>(_data));
_setStringField(env, classname, obj, "mime_type", b->mime_type);
_setStringField(env, classname, obj, "filename", b->filename);
@ -503,6 +528,8 @@ namespace pEp {
jobject obj = env->NewObject(clazz, constructor);
assert(obj);
env->DeleteLocalRef(clazz);
bloblist_t *_bl;
for (_bl = bl; _bl && _bl->value; _bl = _bl->next) {
jobject o = _from_blob(env, _bl);

Loading…
Cancel
Save