diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-12-04 14:19:29 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-12-04 23:40:59 +0000 |
| commit | e5b4b44fe2362004f78cf6a85f4dd1519ef0ad67 (patch) | |
| tree | 00bef6012d510a3a7e606f59b77a02a4d6f1958c | |
| parent | 85a9c0fb1351a9294b0c3a467f0401bcf7ce2483 (diff) | |
| download | mullvadvpn-e5b4b44fe2362004f78cf6a85f4dd1519ef0ad67.tar.xz mullvadvpn-e5b4b44fe2362004f78cf6a85f4dd1519ef0ad67.zip | |
Use `Arc<JavaVM>` in `AndroidContext`
Allows replacing the custom `Clone` implementation with a
`derive(Clone)`.
| -rw-r--r-- | mullvad-jni/src/lib.rs | 4 | ||||
| -rw-r--r-- | talpid-core/src/offline/android.rs | 4 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/tun_provider/android.rs | 3 | ||||
| -rw-r--r-- | talpid-types/src/android/mod.rs | 17 |
4 files changed, 9 insertions, 19 deletions
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index aeeb3ee742..ce10904aa7 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -22,7 +22,7 @@ use mullvad_daemon::{logging, version, Daemon, DaemonCommandSender}; use mullvad_types::account::AccountData; use std::{ path::{Path, PathBuf}, - sync::{mpsc, Once}, + sync::{mpsc, Arc, Once}, thread, }; use talpid_types::{android::AndroidContext, ErrorExt}; @@ -141,7 +141,7 @@ fn initialize( fn create_android_context(env: &JnixEnv, vpn_service: JObject) -> Result<AndroidContext, Error> { Ok(AndroidContext { - jvm: env.get_java_vm().map_err(Error::GetJvmInstance)?, + jvm: Arc::new(env.get_java_vm().map_err(Error::GetJvmInstance)?), vpn_service: env .new_global_ref(vpn_service) .map_err(Error::CreateGlobalReference)?, diff --git a/talpid-core/src/offline/android.rs b/talpid-core/src/offline/android.rs index eb33331314..4fa45112d6 100644 --- a/talpid-core/src/offline/android.rs +++ b/talpid-core/src/offline/android.rs @@ -10,7 +10,7 @@ use jnix::{ }, JnixEnv, }; -use std::sync::Weak; +use std::sync::{Arc, Weak}; use talpid_types::{android::AndroidContext, ErrorExt}; #[derive(err_derive::Error, Debug)] @@ -41,7 +41,7 @@ pub enum Error { } pub struct MonitorHandle { - jvm: JavaVM, + jvm: Arc<JavaVM>, class: GlobalRef, object: GlobalRef, } diff --git a/talpid-core/src/tunnel/tun_provider/android.rs b/talpid-core/src/tunnel/tun_provider/android.rs index 19d4325abf..09adef6c35 100644 --- a/talpid-core/src/tunnel/tun_provider/android.rs +++ b/talpid-core/src/tunnel/tun_provider/android.rs @@ -12,6 +12,7 @@ use std::{ fs::File, net::{IpAddr, Ipv4Addr, Ipv6Addr}, os::unix::io::{AsRawFd, FromRawFd, RawFd}, + sync::Arc, }; use talpid_types::android::AndroidContext; @@ -45,7 +46,7 @@ pub enum Error { /// Factory of tunnel devices on Android. pub struct AndroidTunProvider { - jvm: JavaVM, + jvm: Arc<JavaVM>, class: GlobalRef, object: GlobalRef, active_tun: Option<File>, diff --git a/talpid-types/src/android/mod.rs b/talpid-types/src/android/mod.rs index 1c8522509d..4169216f3b 100644 --- a/talpid-types/src/android/mod.rs +++ b/talpid-types/src/android/mod.rs @@ -1,19 +1,8 @@ use jnix::jni::{objects::GlobalRef, JavaVM}; +use std::sync::Arc; +#[derive(Clone)] pub struct AndroidContext { - pub jvm: JavaVM, + pub jvm: Arc<JavaVM>, pub vpn_service: GlobalRef, } - -impl Clone for AndroidContext { - fn clone(&self) -> Self { - let jvm_pointer = self.jvm.get_java_vm_pointer(); - let jvm = - unsafe { JavaVM::from_raw(jvm_pointer).expect("Failed to get pointer to Java VM") }; - - AndroidContext { - jvm, - vpn_service: self.vpn_service.clone(), - } - } -} |
