From 4fa4fb1bda872e5b4f46e50a01fea9844c6c78a9 Mon Sep 17 00:00:00 2001 From: Nikolay Edigaryev Date: Mon, 21 Apr 2025 16:16:09 +0200 Subject: [PATCH] Avoid using one-shot triggered events (#102) --- lib/poller.rs | 35 ++++++++++++----------------------- lib/proxy/mod.rs | 2 +- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/lib/poller.rs b/lib/poller.rs index 35415fe..f2d61ca 100644 --- a/lib/poller.rs +++ b/lib/poller.rs @@ -35,38 +35,27 @@ impl Poller<'_> { pub fn arm(&self) -> Result<()> { unsafe { - self.poller - .add(self.vm_fd.as_raw_fd(), self.vm_interest())?; - self.poller - .add(self.host_fd.as_raw_fd(), self.host_interest())?; + self.poller.add_with_mode( + self.vm_fd.as_raw_fd(), + self.vm_interest(), + PollMode::Edge, + )?; + self.poller.add_with_mode( + self.host_fd.as_raw_fd(), + self.host_interest(), + PollMode::Edge, + )?; } let interrupt_signal = polling::os::kqueue::Signal(libc::SIGINT); self.poller - .add_filter( - interrupt_signal, - EventKey::Interrupt.into(), - PollMode::Oneshot, - ) - .unwrap(); + .add_filter(interrupt_signal, EventKey::Interrupt.into(), PollMode::Edge)?; Ok(()) } - pub fn rearm(&mut self) -> Result<()> { + pub fn rearm(&mut self) { self.events.clear(); - - self.poller.modify(self.vm_fd, self.vm_interest())?; - self.poller.modify(self.host_fd, self.host_interest())?; - - let interrupt_signal = polling::os::kqueue::Signal(libc::SIGINT); - self.poller.modify_filter( - interrupt_signal, - EventKey::Interrupt.into(), - PollMode::Oneshot, - )?; - - Ok(()) } pub fn wait(&mut self) -> Result<(bool, bool, bool)> { diff --git a/lib/proxy/mod.rs b/lib/proxy/mod.rs index 03588da..0542422 100644 --- a/lib/proxy/mod.rs +++ b/lib/proxy/mod.rs @@ -81,7 +81,7 @@ impl Proxy<'_> { .tick(&mut self.host, self.dhcp_snooper.lease()); } - self.poller.rearm()?; + self.poller.rearm(); } }