mirror of https://github.com/fafhrd91/actix-net
local-waker: Add safety docs
This commit is contained in:
parent
8ea3b14779
commit
08c16c4597
|
|
@ -44,12 +44,18 @@ impl LocalWaker {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn register(&self, waker: &Waker) -> bool {
|
pub fn register(&self, waker: &Waker) -> bool {
|
||||||
let mut registered = false;
|
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 let Some(prev) = unsafe { &*self.waker.get() } {
|
||||||
if waker.will_wake(prev) {
|
if waker.will_wake(prev) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
registered = 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()) }
|
unsafe { *self.waker.get() = Some(waker.clone()) }
|
||||||
registered
|
registered
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue