From d2a925698d5d2139a67eecac61fcc97c438e1586 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Wed, 24 Jan 2024 17:25:19 +0200 Subject: [PATCH] core/linux: Don't block in run_once() --- core/io/linux.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/core/io/linux.rs b/core/io/linux.rs index 959b9014a..8e21131e3 100644 --- a/core/io/linux.rs +++ b/core/io/linux.rs @@ -32,10 +32,16 @@ impl IO for LinuxIO { fn run_once(&self) -> Result<()> { trace!("run_once()"); let mut ring = self.ring.borrow_mut(); - ring.submit_and_wait(1)?; - let cqe = ring.completion().next().expect("completion queue is empty"); - let c = unsafe { Arc::from_raw(cqe.user_data() as *const Completion) }; - c.complete(); + ring.submit_and_wait(0)?; + loop { + match ring.completion().next() { + Some(cqe) => { + let c = unsafe { Arc::from_raw(cqe.user_data() as *const Completion) }; + c.complete(); + } + None => break, + } + } Ok(()) } }