summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-06-25 17:00:10 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-06-26 20:05:40 +0000
commitecfcceda6c8fd34219b59d51f3613b7770a170fc (patch)
treeebde6eba506fca4487d8d92b0e9c3c96ca876a88
parent3be332cbc708f36c47dd7d16be32a39a6e5f1a2e (diff)
downloadmullvadvpn-ecfcceda6c8fd34219b59d51f3613b7770a170fc.tar.xz
mullvadvpn-ecfcceda6c8fd34219b59d51f3613b7770a170fc.zip
Don't use `JList` wrapper type
Every time it is created, it leaks a local reference to a `Class` object instance.
-rw-r--r--mullvad-jni/src/into_java.rs19
-rw-r--r--mullvad-jni/src/lib.rs1
2 files changed, 14 insertions, 6 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs
index 470424edc0..c5fd9667c0 100644
--- a/mullvad-jni/src/into_java.rs
+++ b/mullvad-jni/src/into_java.rs
@@ -1,8 +1,8 @@
use crate::get_class;
use ipnetwork::IpNetwork;
use jni::{
- objects::{JList, JObject, JString, JValue},
- signature::JavaType,
+ objects::{JObject, JString, JValue},
+ signature::{JavaType, Primitive},
sys::{jboolean, jint, jshort, jsize},
JNIEnv,
};
@@ -63,14 +63,21 @@ where
.new_object(&class, "(I)V", &parameters)
.expect("Failed to create ArrayList object");
- let list =
- JList::from_env(env, list_object).expect("Failed to create JList from ArrayList");
+ let list_class = get_class("java/util/List");
+ let add_method = env
+ .get_method_id(&list_class, "add", "(Ljava/lang/Object;)Z")
+ .expect("Failed to get List.add(Object) method id");
for element in self {
let java_element = env.auto_local(JObject::from(element.into_java(env)));
- list.add(java_element.as_obj())
- .expect("Failed to add element to ArrayList");
+ env.call_method_unchecked(
+ list_object,
+ add_method,
+ JavaType::Primitive(Primitive::Boolean),
+ &[JValue::Object(java_element.as_obj())],
+ )
+ .expect("Failed to add element to ArrayList");
}
list_object
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index 947d2b5f70..ff587a4b38 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -33,6 +33,7 @@ const LOG_FILENAME: &str = "daemon.log";
const CLASSES_TO_LOAD: &[&str] = &[
"java/net/InetAddress",
"java/util/ArrayList",
+ "java/util/List",
"net/mullvad/mullvadvpn/model/AccountData",
"net/mullvad/mullvadvpn/model/Constraint$Any",
"net/mullvad/mullvadvpn/model/Constraint$Only",