Skip to content

Commit f85e445

Browse files
author
Mihail Slavchev
committed
fix jni reference leaks (issue #72)
1 parent cb21c83 commit f85e445

File tree

3 files changed

+7
-7
lines changed

3 files changed

+7
-7
lines changed

src/jni/ArgConverter.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,9 @@ Handle<Array> ArgConverter::ConvertJavaArgsToJsArgs(jobjectArray args)
179179
int jArrayIndex = 0;
180180
for (int i = 0; i < argc; i++)
181181
{
182-
jobject argTypeIDObj = env.GetObjectArrayElement(args, jArrayIndex++);
183-
jobject arg = env.GetObjectArrayElement(args, jArrayIndex++);
184-
jobject argJavaClassPath = env.GetObjectArrayElement(args, jArrayIndex++);
182+
JniLocalRef argTypeIDObj(env.GetObjectArrayElement(args, jArrayIndex++));
183+
JniLocalRef arg(env.GetObjectArrayElement(args, jArrayIndex++));
184+
JniLocalRef argJavaClassPath(env.GetObjectArrayElement(args, jArrayIndex++));
185185

186186
jint length;
187187
jint argTypeID = ObjectToInt(argTypeIDObj);
@@ -246,7 +246,7 @@ Handle<String> ArgConverter::jcharToV8String(jchar value)
246246
{
247247
JEnv env;
248248

249-
jstring str = env.NewString(&value, 1);
249+
JniLocalRef str(env.NewString(&value, 1));
250250
jboolean bol = true;
251251
const char* resP = env.GetStringUTFChars(str, &bol);
252252
auto v8String = ConvertToV8String(resP, 1);

src/jni/ArrayElementAccessor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Handle<Value> ArrayElementAccessor::GetArrayElement(const Handle<Object>& array,
5252
jcharArray charArr = reinterpret_cast<jcharArray>(arr);
5353
jchar charArrValue;
5454
env.GetCharArrayRegion(charArr, startIndex, length, &charArrValue);
55-
jstring s = env.NewString(&charArrValue, 1);
55+
JniLocalRef s(env.NewString(&charArrValue, 1));
5656
const char* singleChar = env.GetStringUTFChars(s, &isCopy);
5757
value = CheckForArrayAccessException(env, elementSignature, singleChar);
5858
env.ReleaseStringUTFChars(s, singleChar);
@@ -129,7 +129,7 @@ void ArrayElementAccessor::SetArrayElement(const Handle<Object>& array, uint32_t
129129
else if (elementSignature == "C")
130130
{
131131
String::Utf8Value utf8(value->ToString());
132-
jstring s = env.NewString((jchar*) *utf8, 1);
132+
JniLocalRef s(env.NewString((jchar*) *utf8, 1));
133133
const char* singleChar = env.GetStringUTFChars(s, &isCopy);
134134
jchar charElementValue = *singleChar;
135135
env.ReleaseStringUTFChars(s, singleChar);

src/jni/FieldAccessor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ Handle<Value> FieldAccessor::GetJavaField(const Handle<Object>& target, FieldCal
106106
result = env.GetCharField(targetJavaObject, fieldId);
107107
}
108108

109-
jstring str = env.NewString(&result, 1);
109+
JniLocalRef str(env.NewString(&result, 1));
110110
jboolean bol = true;
111111
const char* resP = env.GetStringUTFChars(str, &bol);
112112
env.ReleaseStringUTFChars(str, resP);

0 commit comments

Comments
 (0)