Downgrade context sigcontrol to read
This commit is contained in:
@@ -620,6 +620,14 @@ impl<'a, L: Level, T> RwLockWriteGuard<'a, L, T> {
|
||||
drop(self.inner);
|
||||
self.lock_token
|
||||
}
|
||||
|
||||
/// Upgrade to RO lock
|
||||
pub fn downgrade(self) -> RwLockReadGuard<'a, L, T> {
|
||||
RwLockReadGuard {
|
||||
inner: self.inner.downgrade(),
|
||||
lock_token: self.lock_token,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<L: Level, T> core::ops::Deref for RwLockWriteGuard<'_, L, T> {
|
||||
|
||||
@@ -80,13 +80,13 @@ impl WaitCondition {
|
||||
let mut preempt = PreemptGuardL2::new(¤t_context_ref, &mut token);
|
||||
let token = preempt.token();
|
||||
{
|
||||
let mut context = current_context_ref.write(token.token());
|
||||
let context = current_context_ref.upgradeable_read(token.token());
|
||||
if let Some((control, pctl, _)) = context.sigcontrol()
|
||||
&& control.currently_pending_unblocked(pctl) != 0
|
||||
{
|
||||
return false;
|
||||
}
|
||||
context.block(reason);
|
||||
context.upgrade().block(reason);
|
||||
}
|
||||
|
||||
self.contexts
|
||||
|
||||
Reference in New Issue
Block a user