mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-25 10:23:23 +00:00
Use LocalIrqDisable
in Subject
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
2ddcd2d9a7
commit
96efd62007
@ -3,6 +3,7 @@
|
|||||||
use core::sync::atomic::{AtomicUsize, Ordering};
|
use core::sync::atomic::{AtomicUsize, Ordering};
|
||||||
|
|
||||||
use keyable_arc::KeyableWeak;
|
use keyable_arc::KeyableWeak;
|
||||||
|
use ostd::sync::LocalIrqDisabled;
|
||||||
|
|
||||||
use super::{Events, EventsFilter, Observer};
|
use super::{Events, EventsFilter, Observer};
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
@ -10,7 +11,7 @@ use crate::prelude::*;
|
|||||||
/// A Subject notifies interesting events to registered observers.
|
/// A Subject notifies interesting events to registered observers.
|
||||||
pub struct Subject<E: Events, F: EventsFilter<E> = ()> {
|
pub struct Subject<E: Events, F: EventsFilter<E> = ()> {
|
||||||
// A table that maintains all interesting observers.
|
// A table that maintains all interesting observers.
|
||||||
observers: SpinLock<BTreeMap<KeyableWeak<dyn Observer<E>>, F>>,
|
observers: SpinLock<BTreeMap<KeyableWeak<dyn Observer<E>>, F>, LocalIrqDisabled>,
|
||||||
// To reduce lock contentions, we maintain a counter for the size of the table
|
// To reduce lock contentions, we maintain a counter for the size of the table
|
||||||
num_observers: AtomicUsize,
|
num_observers: AtomicUsize,
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user