summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSebastian Holmin <sebastian.holmin@mullvad.net>2026-01-15 17:16:25 +0100
committerSebastian Holmin <sebastian.holmin@mullvad.net>2026-01-15 17:16:25 +0100
commit6d87b704b7ec00dd5700a3c429ae159c93fa4310 (patch)
tree8ff64814d235310489545b60e3a959dea69ead98
parenta05f57462de6c767139e1021926ac80d793ced47 (diff)
parent9cc8799696c9b412818364945385f5a865af2257 (diff)
downloadmullvadvpn-6d87b704b7ec00dd5700a3c429ae159c93fa4310.tar.xz
mullvadvpn-6d87b704b7ec00dd5700a3c429ae159c93fa4310.zip
Merge branch 'android-app-crashed-in-landscape-mode-des-2793'
-rw-r--r--mullvad-daemon/src/logging.rs13
-rw-r--r--mullvad-jni/src/lib.rs18
2 files changed, 21 insertions, 10 deletions
diff --git a/mullvad-daemon/src/logging.rs b/mullvad-daemon/src/logging.rs
index 3eeffe1575..24438c13e3 100644
--- a/mullvad-daemon/src/logging.rs
+++ b/mullvad-daemon/src/logging.rs
@@ -1,7 +1,10 @@
use std::{
io,
path::PathBuf,
- sync::atomic::{AtomicBool, Ordering},
+ sync::{
+ Arc,
+ atomic::{AtomicBool, Ordering},
+ },
};
use talpid_core::logging::rotate_log;
use tracing_appender::non_blocking;
@@ -26,9 +29,6 @@ pub enum Error {
#[error("Unable to rotate daemon log file")]
RotateLog(#[from] talpid_core::logging::RotateLogError),
-
- #[error("Unable to set logger")]
- SetLoggerError(#[from] log::SetLoggerError),
}
/// A [`MakeWriter`] that wraps an [`OptionalWriter`].
@@ -85,10 +85,11 @@ pub fn is_enabled() -> bool {
LOG_ENABLED.load(Ordering::SeqCst)
}
+#[derive(Clone)]
pub struct LogHandle {
env_filter: Handle<EnvFilter, Registry>,
log_stream: LogStreamer,
- _file_appender_guard: Option<non_blocking::WorkerGuard>,
+ _file_appender_guard: Option<Arc<non_blocking::WorkerGuard>>,
}
/// A location to put logs.
@@ -194,7 +195,7 @@ pub fn init_logger(
let file_appender =
tracing_appender::rolling::never(&log_location.directory, &log_location.filename);
let (appender, guard) = non_blocking(file_appender);
- (Some(guard), OptionalMakeWriter(Some(appender)))
+ (Some(Arc::new(guard)), OptionalMakeWriter(Some(appender)))
} else {
(None, OptionalMakeWriter(None))
};
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index 17d3ef47e6..2930fff3d0 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -19,7 +19,7 @@ use mullvad_daemon::{
runtime::new_multi_thread,
version,
};
-use std::collections::HashMap;
+use std::{collections::HashMap, sync::OnceLock};
use std::{
ffi::CString,
io,
@@ -93,9 +93,19 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_initial
let env = JnixEnv::from(env);
let files_dir = pathbuf_from_java(&env, files_directory);
- let log_handle = start_logging(&files_dir)
- .map_err(Error::InitializeLogging)
- .unwrap();
+
+ // In some cases, this function may be called multiple times for the same daemon process.
+ // Since the tracing dispatcher can only be initialized once, we use a OnceLock to
+ // reuse the existing log handle
+ static LOG_HANDLE: OnceLock<LogHandle> = OnceLock::new();
+ let log_handle = LOG_HANDLE
+ .get_or_init(|| {
+ start_logging(&files_dir)
+ .map_err(Error::InitializeLogging)
+ .unwrap()
+ })
+ .clone();
+
version::log_version();
log::info!("Pre-loading classes!");