summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-10-21 14:03:32 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-10-22 17:06:28 +0000
commitbfee5d064f88bb4ad4c6c023ca37984c62d96496 (patch)
tree258f7d829e4847b0f91b400d94b79f382d2d804d
parent545d41ee38f8fd4c49622b9a51558144f62d6d89 (diff)
downloadmullvadvpn-bfee5d064f88bb4ad4c6c023ca37984c62d96496.tar.xz
mullvadvpn-bfee5d064f88bb4ad4c6c023ca37984c62d96496.zip
Detect if multiple daemon instances are running
-rw-r--r--mullvad-jni/src/lib.rs17
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(()));