diff options
| author | Sebastian Holmin <sebastian.holmin@mullvad.net> | 2026-01-15 17:16:25 +0100 |
|---|---|---|
| committer | Sebastian Holmin <sebastian.holmin@mullvad.net> | 2026-01-15 17:16:25 +0100 |
| commit | 6d87b704b7ec00dd5700a3c429ae159c93fa4310 (patch) | |
| tree | 8ff64814d235310489545b60e3a959dea69ead98 | |
| parent | a05f57462de6c767139e1021926ac80d793ced47 (diff) | |
| parent | 9cc8799696c9b412818364945385f5a865af2257 (diff) | |
| download | mullvadvpn-6d87b704b7ec00dd5700a3c429ae159c93fa4310.tar.xz mullvadvpn-6d87b704b7ec00dd5700a3c429ae159c93fa4310.zip | |
Merge branch 'android-app-crashed-in-landscape-mode-des-2793'
| -rw-r--r-- | mullvad-daemon/src/logging.rs | 13 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 18 |
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!"); |
