Put the whole print macro in a critical section (#4154)

This commit is contained in:
Dániel Buga 2025-09-19 20:09:57 +02:00 committed by GitHub
parent 62529e2fd3
commit 9f7193fec4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 6 deletions

View File

@ -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

View File

@ -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<R>(f: impl FnOnce(LockToken) -> R) -> R {
pub fn with<R>(f: impl FnOnce(LockToken) -> R) -> R {
#[cfg(feature = "critical-section")]
return LOCK.lock(|| f(unsafe { LockToken::conjure() }));