From 08c16c45972c7dc98f7f0e06d38ea1cb3260394b Mon Sep 17 00:00:00 2001 From: Nur Date: Sun, 1 Feb 2026 19:31:57 +0600 Subject: [PATCH] local-waker: Add safety docs --- local-waker/src/lib.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/local-waker/src/lib.rs b/local-waker/src/lib.rs index d83a4bc0..bc2f141a 100644 --- a/local-waker/src/lib.rs +++ b/local-waker/src/lib.rs @@ -44,12 +44,18 @@ impl LocalWaker { #[inline] pub fn register(&self, waker: &Waker) -> bool { let mut registered = false; + + // SAFETY: `LocalWaker` is `!Send`, threfore this cannot be called from a separate thread. + // And this is an unique access before the assignment below. if let Some(prev) = unsafe { &*self.waker.get() } { if waker.will_wake(prev) { return true; } registered = true; } + + // SAFETY: This can cause data races if called from a separate thread, + // but `LocalWaker` is `!Send` + `!Sync` so this won't happen. unsafe { *self.waker.get() = Some(waker.clone()) } registered }