diff --git a/src/__private_api.rs b/src/__private_api.rs index 58d4c0fab..a9492aeed 100644 --- a/src/__private_api.rs +++ b/src/__private_api.rs @@ -18,7 +18,7 @@ mod sealed { // Types for the `kv` argument. -impl<'a> KVs<'a> for &'a [(&'a str, Value<'a>)] { +impl<'a, const N: usize> KVs<'a> for &'a [(&'a str, Value<'a>); N] { #[inline] fn into_kvs(self) -> Option<&'a [(&'a str, Value<'a>)]> { Some(self) diff --git a/src/lib.rs b/src/lib.rs index a8de0e290..688e6221e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1528,7 +1528,8 @@ where pub unsafe fn set_logger_racy(logger: &'static dyn Log) -> Result<(), SetLoggerError> { match STATE.load(Ordering::Acquire) { UNINITIALIZED => { - LOGGER = logger; + // SAFETY: Access to `LOGGER` is synchronized through `STATE` + unsafe { LOGGER = logger }; STATE.store(INITIALIZED, Ordering::Release); Ok(()) } diff --git a/src/macros.rs b/src/macros.rs index 14e4ac64b..77da9a840 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -126,7 +126,7 @@ macro_rules! __log { $crate::__private_api::format_args!($($arg)+), lvl, &($target, $crate::__private_api::module_path!(), $crate::__private_api::loc()), - &[$(($crate::__log_key!($key), $crate::__log_value!($key $(:$capture)* = $($value)*))),+] as &[_], + &[$(($crate::__log_key!($key), $crate::__log_value!($key $(:$capture)* = $($value)*))),+], ); } }); @@ -431,9 +431,7 @@ macro_rules! __log_logger { $crate::__private_api::GlobalLogger }}; - ($logger:expr) => {{ - &($logger) - }}; + ($logger:expr) => {&($logger)}; } // These macros use a pattern of #[cfg]s to produce nicer error