From 80962497653d91bd46c4e42523dd1b243042f276 Mon Sep 17 00:00:00 2001 From: Zhang Junyang Date: Thu, 20 Nov 2025 11:13:10 +0800 Subject: [PATCH] Add a lock before capturing coverage --- ostd/src/coverage.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ostd/src/coverage.rs b/ostd/src/coverage.rs index 8bf398e46..f05a1f4b4 100644 --- a/ostd/src/coverage.rs +++ b/ostd/src/coverage.rs @@ -8,9 +8,15 @@ use alloc::vec::Vec; use core::mem::ManuallyDrop; +use crate::sync::SpinLock; + /// A hook to be invoked on QEMU exit for dumping the code coverage data. pub(crate) fn on_qemu_exit() { let mut coverage = ManuallyDrop::new(Vec::new()); + static COV_LOCK: SpinLock<()> = SpinLock::new(()); + let _guard = COV_LOCK.disable_irq().lock(); + // SAFETY: The above lock ensures that this function is not called + // concurrently by multiple threads. unsafe { minicov::capture_coverage(&mut *coverage).unwrap(); }