diff options
| -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(), - } - } -} |
