Avoid using one-shot triggered events (#102)

This commit is contained in:
Nikolay Edigaryev 2025-04-21 16:16:09 +02:00 committed by GitHub
parent 11213d0f46
commit 4fa4fb1bda
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 24 deletions

View File

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

View File

@ -81,7 +81,7 @@ impl Proxy<'_> {
.tick(&mut self.host, self.dhcp_snooper.lease());
}
self.poller.rearm()?;
self.poller.rearm();
}
}