avoid tls access while iterating through mpsc thread entries

This commit is contained in:
Ibraheem Ahmed 2023-07-19 11:50:29 -04:00
parent 77e24f90f5
commit fb31a1ac21

View File

@ -66,11 +66,16 @@ impl Waker {
/// Attempts to find another thread's entry, select the operation, and wake it up.
#[inline]
pub(crate) fn try_select(&mut self) -> Option<Entry> {
if self.selectors.is_empty() {
None
} else {
let thread_id = current_thread_id();
self.selectors
.iter()
.position(|selector| {
// Does the entry belong to a different thread?
selector.cx.thread_id() != current_thread_id()
selector.cx.thread_id() != thread_id
&& selector // Try selecting this operation.
.cx
.try_select(Selected::Operation(selector.oper))
@ -87,6 +92,7 @@ impl Waker {
// performance.
.map(|pos| self.selectors.remove(pos))
}
}
/// Notifies all operations waiting to be ready.
#[inline]