From c4c810744d543f9a1893496db53853f62be9374d Mon Sep 17 00:00:00 2001 From: janis Date: Sun, 2 Aug 2026 16:12:12 +0200 Subject: [PATCH] kernel: remove silly drop_guard macro --- kernel/src/lib.rs | 43 +++++++++++++++++------------------------- kernel/src/sync/mod.rs | 4 ++-- 2 files changed, 19 insertions(+), 28 deletions(-) diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs index 710921b..08a77f0 100644 --- a/kernel/src/lib.rs +++ b/kernel/src/lib.rs @@ -41,31 +41,22 @@ pub unsafe fn volatile_copy(src: *const T, dst: *mut T, count: usize) } } -#[macro_export] -macro_rules! drop_guard { - ($($stmts:stmt)*) => { - { - struct __DropGuard(::core::mem::ManuallyDrop); - - impl __DropGuard { - #[allow(dead_code)] - fn forget(self) { - let mut this = ::core::mem::ManuallyDrop::new(self); - unsafe { - ::core::mem::ManuallyDrop::drop(&mut this.0); - } - } - } - - impl Drop for __DropGuard { - fn drop(&mut self) { - unsafe { ::core::ptr::read(&*self.0)() } - } - } - - __DropGuard(::core::mem::ManuallyDrop::new(|| { - $($stmts)* - })) +pub struct DropGuard(::core::mem::ManuallyDrop); +impl DropGuard { + pub fn new(f: F) -> Self { + DropGuard(::core::mem::ManuallyDrop::new(f)) + } + #[allow(dead_code)] + pub fn forget(self) { + let mut this = ::core::mem::ManuallyDrop::new(self); + unsafe { + ::core::mem::ManuallyDrop::drop(&mut this.0); } - }; + } +} + +impl Drop for DropGuard { + fn drop(&mut self) { + unsafe { ::core::ptr::read(&*self.0)() } + } } diff --git a/kernel/src/sync/mod.rs b/kernel/src/sync/mod.rs index f828c7d..d00f9ba 100644 --- a/kernel/src/sync/mod.rs +++ b/kernel/src/sync/mod.rs @@ -210,9 +210,9 @@ mod once { // even though we don't have unwinding, for // completeness sake we'll poison the lock if // the closure panics. - let guard = crate::drop_guard! { + let guard = crate::DropGuard::new(|| { self.state.store(POISONED, Ordering::Release) - }; + }); let state = OnceState { poisoned: state == POISONED,