diff --git a/src/jniutils.cc b/src/jniutils.cc index 8b47dfe..fcc3e1e 100644 --- a/src/jniutils.cc +++ b/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, "", "(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, "", "()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(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(_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);