diff --git a/src/garage/main.rs b/src/garage/main.rs index f55d0324..6a8c9412 100644 --- a/src/garage/main.rs +++ b/src/garage/main.rs @@ -181,13 +181,18 @@ async fn run(opt: Opt) -> Result<(), Error> { } } +/// # Safety +/// +/// should be called before tokio runtime initialization +/// to limit multithread problem with `std::env::set_var` which is unsafe fn init_logging(opt: &Opt) { if std::env::var("RUST_LOG").is_err() { let default_log = match &opt.cmd { Command::Server => "netapp=info,garage=info", _ => "netapp=warn,garage=warn", }; - std::env::set_var("RUST_LOG", default_log) + + unsafe { std::env::set_var("RUST_LOG", default_log) }; } let env_filter = tracing_subscriber::filter::EnvFilter::from_default_env(); diff --git a/src/k2v-client/bin/k2v-cli.rs b/src/k2v-client/bin/k2v-cli.rs index 06850319..d361c6dc 100644 --- a/src/k2v-client/bin/k2v-cli.rs +++ b/src/k2v-client/bin/k2v-cli.rs @@ -388,9 +388,12 @@ impl Filter { } } +/// # Safety +/// +/// initialize `RUST_LOG` env var before start tokio runtime to limit multithread problem with `std::env::set_var` which is unsafe fn main() -> Result<(), Error> { if std::env::var("RUST_LOG").is_err() { - std::env::set_var("RUST_LOG", "warn") + unsafe { std::env::set_var("RUST_LOG", "warn") }; } tracing_subscriber::fmt()