mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-21 16:33:24 +00:00
Enable RCU to read reference to stored pointers
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
36f6f9bcd4
commit
a21e895102
@ -55,12 +55,9 @@ impl AnyConsoleDevice for ConsoleDevice {
|
||||
fn register_callback(&self, callback: &'static ConsoleCallback) {
|
||||
loop {
|
||||
let callbacks = self.callbacks.read();
|
||||
let mut callbacks_cloned = callbacks.clone();
|
||||
let mut callbacks_cloned = callbacks.get().clone();
|
||||
callbacks_cloned.push(callback);
|
||||
if callbacks
|
||||
.compare_exchange(Box::new(callbacks_cloned))
|
||||
.is_ok()
|
||||
{
|
||||
if callbacks.compare_exchange(callbacks_cloned).is_ok() {
|
||||
break;
|
||||
}
|
||||
// Contention on pushing, retry.
|
||||
@ -150,7 +147,7 @@ impl ConsoleDevice {
|
||||
self.receive_buffer.sync(0..len as usize).unwrap();
|
||||
|
||||
let callbacks = self.callbacks.read();
|
||||
for callback in callbacks.iter() {
|
||||
for callback in callbacks.get().iter() {
|
||||
let mut reader = self.receive_buffer.reader().unwrap();
|
||||
reader.limit(len as usize);
|
||||
callback(reader);
|
||||
|
Reference in New Issue
Block a user