diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-10-21 14:03:32 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-10-22 17:06:28 +0000 |
| commit | bfee5d064f88bb4ad4c6c023ca37984c62d96496 (patch) | |
| tree | 258f7d829e4847b0f91b400d94b79f382d2d804d | |
| parent | 545d41ee38f8fd4c49622b9a51558144f62d6d89 (diff) | |
| download | mullvadvpn-bfee5d064f88bb4ad4c6c023ca37984c62d96496.tar.xz mullvadvpn-bfee5d064f88bb4ad4c6c023ca37984c62d96496.zip | |
Detect if multiple daemon instances are running
| -rw-r--r-- | mullvad-jni/src/lib.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index cabd7782bc..7358bdcc20 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -26,13 +26,17 @@ use std::{ io, path::{Path, PathBuf}, ptr, - sync::{mpsc, Arc, Once}, + sync::{ + atomic::{AtomicUsize, Ordering}, + mpsc, Arc, Once, + }, thread, }; use talpid_types::{android::AndroidContext, ErrorExt}; const LOG_FILENAME: &str = "daemon.log"; +static DAEMON_INSTANCE_COUNT: AtomicUsize = AtomicUsize::new(0); static LOAD_CLASSES: Once = Once::new(); static LOG_START: Once = Once::new(); static mut LOG_INIT_RESULT: Option<Result<(), String>> = None; @@ -214,6 +218,15 @@ fn spawn_daemon( thread::spawn(move || { let jvm = android_context.jvm.clone(); + let running_instances = DAEMON_INSTANCE_COUNT.fetch_add(1, Ordering::AcqRel); + + if running_instances != 0 { + log::error!( + "It seems that there are already {} instances of the Mullvad daemon running", + running_instances + ); + } + let daemon = runtime.block_on(Daemon::start( Some(resource_dir.clone()), resource_dir.clone(), @@ -224,6 +237,8 @@ fn spawn_daemon( android_context, )); + DAEMON_INSTANCE_COUNT.fetch_sub(1, Ordering::AcqRel); + match daemon { Ok(daemon) => { let _ = tx.send(Ok(())); |
