aboutsummaryrefslogtreecommitdiff
path: root/src/sys/unix/selector
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/unix/selector')
-rw-r--r--src/sys/unix/selector/epoll.rs15
-rw-r--r--src/sys/unix/selector/kqueue.rs15
2 files changed, 26 insertions, 4 deletions
diff --git a/src/sys/unix/selector/epoll.rs b/src/sys/unix/selector/epoll.rs
index 13f1617..76ee7f9 100644
--- a/src/sys/unix/selector/epoll.rs
+++ b/src/sys/unix/selector/epoll.rs
@@ -4,7 +4,7 @@ use libc::{EPOLLET, EPOLLIN, EPOLLOUT, EPOLLRDHUP};
use log::error;
use std::os::unix::io::{AsRawFd, RawFd};
#[cfg(debug_assertions)]
-use std::sync::atomic::{AtomicUsize, Ordering};
+use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use std::time::Duration;
use std::{cmp, i32, io, ptr};
@@ -17,6 +17,8 @@ pub struct Selector {
#[cfg(debug_assertions)]
id: usize,
ep: RawFd,
+ #[cfg(debug_assertions)]
+ has_waker: AtomicBool,
}
impl Selector {
@@ -33,6 +35,8 @@ impl Selector {
#[cfg(debug_assertions)]
id: NEXT_ID.fetch_add(1, Ordering::Relaxed),
ep,
+ #[cfg(debug_assertions)]
+ has_waker: AtomicBool::new(false),
})
}
@@ -42,6 +46,8 @@ impl Selector {
#[cfg(debug_assertions)]
id: self.id,
ep,
+ #[cfg(debug_assertions)]
+ has_waker: AtomicBool::new(self.has_waker.load(Ordering::Acquire)),
})
}
@@ -93,9 +99,14 @@ impl Selector {
pub fn deregister(&self, fd: RawFd) -> io::Result<()> {
syscall!(epoll_ctl(self.ep, libc::EPOLL_CTL_DEL, fd, ptr::null_mut())).map(|_| ())
}
+
+ #[cfg(debug_assertions)]
+ pub fn register_waker(&self) -> bool {
+ self.has_waker.swap(true, Ordering::AcqRel)
+ }
}
-cfg_net! {
+cfg_io_source! {
impl Selector {
#[cfg(debug_assertions)]
pub fn id(&self) -> usize {
diff --git a/src/sys/unix/selector/kqueue.rs b/src/sys/unix/selector/kqueue.rs
index 2ebac9a..454f47d 100644
--- a/src/sys/unix/selector/kqueue.rs
+++ b/src/sys/unix/selector/kqueue.rs
@@ -4,7 +4,7 @@ use std::mem::MaybeUninit;
use std::ops::{Deref, DerefMut};
use std::os::unix::io::{AsRawFd, RawFd};
#[cfg(debug_assertions)]
-use std::sync::atomic::{AtomicUsize, Ordering};
+use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use std::time::Duration;
use std::{cmp, io, ptr, slice};
@@ -69,6 +69,8 @@ pub struct Selector {
#[cfg(debug_assertions)]
id: usize,
kq: RawFd,
+ #[cfg(debug_assertions)]
+ has_waker: AtomicBool,
}
impl Selector {
@@ -79,6 +81,8 @@ impl Selector {
#[cfg(debug_assertions)]
id: NEXT_ID.fetch_add(1, Ordering::Relaxed),
kq,
+ #[cfg(debug_assertions)]
+ has_waker: AtomicBool::new(false),
})
}
@@ -88,6 +92,8 @@ impl Selector {
#[cfg(debug_assertions)]
id: self.id,
kq,
+ #[cfg(debug_assertions)]
+ has_waker: AtomicBool::new(self.has_waker.load(Ordering::Acquire)),
})
}
@@ -208,6 +214,11 @@ impl Selector {
kevent_register(self.kq, &mut changes, &[libc::ENOENT as Data])
}
+ #[cfg(debug_assertions)]
+ pub fn register_waker(&self) -> bool {
+ self.has_waker.swap(true, Ordering::AcqRel)
+ }
+
// Used by `Waker`.
#[cfg(any(target_os = "freebsd", target_os = "ios", target_os = "macos"))]
pub fn setup_waker(&self, token: Token) -> io::Result<()> {
@@ -292,7 +303,7 @@ fn check_errors(events: &[libc::kevent], ignored_errors: &[Data]) -> io::Result<
Ok(())
}
-cfg_net! {
+cfg_io_source! {
#[cfg(debug_assertions)]
impl Selector {
pub fn id(&self) -> usize {