diff --git a/esp-println/CHANGELOG.md b/esp-println/CHANGELOG.md index 1e69cef30..2d132fd84 100644 --- a/esp-println/CHANGELOG.md +++ b/esp-println/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- `critical-section` now wraps the entirety of the `print!` macros (#4154) ### Removed diff --git a/esp-println/src/lib.rs b/esp-println/src/lib.rs index e1e6bc151..f7aedbabf 100644 --- a/esp-println/src/lib.rs +++ b/esp-println/src/lib.rs @@ -40,8 +40,10 @@ log_format!("serial"); macro_rules! println { ($($arg:tt)*) => {{ { - use core::fmt::Write; - writeln!($crate::Printer, $($arg)*).ok(); + $crate::with(|_| { + use core::fmt::Write; + writeln!($crate::Printer, $($arg)*).ok(); + }); } }}; } @@ -52,8 +54,10 @@ macro_rules! println { macro_rules! print { ($($arg:tt)*) => {{ { - use core::fmt::Write; - write!($crate::Printer, $($arg)*).ok(); + $crate::with(|_| { + use core::fmt::Write; + write!($crate::Printer, $($arg)*).ok(); + }); } }}; } @@ -486,7 +490,8 @@ mod noop { use core::marker::PhantomData; #[derive(Clone, Copy)] -struct LockToken<'a>(PhantomData<&'a ()>); +#[doc(hidden)] +pub struct LockToken<'a>(PhantomData<&'a ()>); impl LockToken<'_> { #[allow(unused)] @@ -499,8 +504,9 @@ impl LockToken<'_> { static LOCK: esp_sync::RawMutex = esp_sync::RawMutex::new(); /// Runs the callback in a critical section, if enabled. +#[doc(hidden)] #[inline] -fn with(f: impl FnOnce(LockToken) -> R) -> R { +pub fn with(f: impl FnOnce(LockToken) -> R) -> R { #[cfg(feature = "critical-section")] return LOCK.lock(|| f(unsafe { LockToken::conjure() }));