mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
Fix leakage of JNI object references
Fixes https://github.com/godotengine/godot/issues/87548
This commit is contained in:
parent
b8fa48be04
commit
f291a4ed3a
20 changed files with 139 additions and 32 deletions
|
@ -172,6 +172,8 @@ void GodotJavaWrapper::alert(const String &p_message, const String &p_title) {
|
|||
jstring jStrMessage = env->NewStringUTF(p_message.utf8().get_data());
|
||||
jstring jStrTitle = env->NewStringUTF(p_title.utf8().get_data());
|
||||
env->CallVoidMethod(godot_instance, _alert, jStrMessage, jStrTitle);
|
||||
env->DeleteLocalRef(jStrMessage);
|
||||
env->DeleteLocalRef(jStrTitle);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -231,6 +233,7 @@ void GodotJavaWrapper::set_clipboard(const String &p_text) {
|
|||
ERR_FAIL_NULL(env);
|
||||
jstring jStr = env->NewStringUTF(p_text.utf8().get_data());
|
||||
env->CallVoidMethod(godot_instance, _set_clipboard, jStr);
|
||||
env->DeleteLocalRef(jStr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -253,7 +256,9 @@ bool GodotJavaWrapper::request_permission(const String &p_name) {
|
|||
JNIEnv *env = get_jni_env();
|
||||
ERR_FAIL_NULL_V(env, false);
|
||||
jstring jStrName = env->NewStringUTF(p_name.utf8().get_data());
|
||||
return env->CallBooleanMethod(godot_instance, _request_permission, jStrName);
|
||||
bool result = env->CallBooleanMethod(godot_instance, _request_permission, jStrName);
|
||||
env->DeleteLocalRef(jStrName);
|
||||
return result;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
@ -340,7 +345,9 @@ int GodotJavaWrapper::create_new_godot_instance(const List<String> &args) {
|
|||
ERR_FAIL_NULL_V(env, 0);
|
||||
jobjectArray jargs = env->NewObjectArray(args.size(), env->FindClass("java/lang/String"), env->NewStringUTF(""));
|
||||
for (int i = 0; i < args.size(); i++) {
|
||||
env->SetObjectArrayElement(jargs, i, env->NewStringUTF(args[i].utf8().get_data()));
|
||||
jstring j_arg = env->NewStringUTF(args[i].utf8().get_data());
|
||||
env->SetObjectArrayElement(jargs, i, j_arg);
|
||||
env->DeleteLocalRef(j_arg);
|
||||
}
|
||||
return env->CallIntMethod(godot_instance, _create_new_godot_instance, jargs);
|
||||
} else {
|
||||
|
@ -355,6 +362,8 @@ void GodotJavaWrapper::begin_benchmark_measure(const String &p_context, const St
|
|||
jstring j_context = env->NewStringUTF(p_context.utf8().get_data());
|
||||
jstring j_label = env->NewStringUTF(p_label.utf8().get_data());
|
||||
env->CallVoidMethod(godot_instance, _begin_benchmark_measure, j_context, j_label);
|
||||
env->DeleteLocalRef(j_context);
|
||||
env->DeleteLocalRef(j_label);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -365,6 +374,8 @@ void GodotJavaWrapper::end_benchmark_measure(const String &p_context, const Stri
|
|||
jstring j_context = env->NewStringUTF(p_context.utf8().get_data());
|
||||
jstring j_label = env->NewStringUTF(p_label.utf8().get_data());
|
||||
env->CallVoidMethod(godot_instance, _end_benchmark_measure, j_context, j_label);
|
||||
env->DeleteLocalRef(j_context);
|
||||
env->DeleteLocalRef(j_label);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -374,6 +385,7 @@ void GodotJavaWrapper::dump_benchmark(const String &benchmark_file) {
|
|||
ERR_FAIL_NULL(env);
|
||||
jstring j_benchmark_file = env->NewStringUTF(benchmark_file.utf8().get_data());
|
||||
env->CallVoidMethod(godot_instance, _dump_benchmark, j_benchmark_file);
|
||||
env->DeleteLocalRef(j_benchmark_file);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -383,7 +395,9 @@ bool GodotJavaWrapper::has_feature(const String &p_feature) const {
|
|||
ERR_FAIL_NULL_V(env, false);
|
||||
|
||||
jstring j_feature = env->NewStringUTF(p_feature.utf8().get_data());
|
||||
return env->CallBooleanMethod(godot_instance, _has_feature, j_feature);
|
||||
bool result = env->CallBooleanMethod(godot_instance, _has_feature, j_feature);
|
||||
env->DeleteLocalRef(j_feature);
|
||||
return result;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue