diff --git a/AdvLoggerPkg/Crates/RustAdvancedLoggerDxe/src/lib.rs b/AdvLoggerPkg/Crates/RustAdvancedLoggerDxe/src/lib.rs index 452549b568..5ea6210eef 100644 --- a/AdvLoggerPkg/Crates/RustAdvancedLoggerDxe/src/lib.rs +++ b/AdvLoggerPkg/Crates/RustAdvancedLoggerDxe/src/lib.rs @@ -131,7 +131,12 @@ impl LockedAdvancedLogger { // Log the debug output in `args` at the given log level. fn log(&self, level: usize, args: fmt::Arguments) { - self.inner.lock().log(level, args) + // Note: tasks at higher TPL may interrupt logging of tasks at lower TPL. This could cause deadlock here, if the + // lower TPL thread is holding the lock and is interrupted at a higher TPL. For now, use try_lock() to avoid + // deadlock here. This has the downside of potentially dropping messages at higher TPL. + if let Some(mut logger) = self.inner.try_lock() { + logger.log(level, args) + } } }