diff options
Diffstat (limited to 'src/sys/unix/selector/epoll.rs')
-rw-r--r-- | src/sys/unix/selector/epoll.rs | 15 |
1 files changed, 13 insertions, 2 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 { |