Enable RCU to read reference to stored pointers

This commit is contained in:
Chen Chengjun
2025-04-10 10:32:17 +08:00
committed by Tate, Hongliang Tian
parent 36f6f9bcd4
commit a21e895102
6 changed files with 244 additions and 181 deletions

View File

@ -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);