Skip to content

Commit

Permalink
feat: Move poll::selector to Registry::selector.
Browse files Browse the repository at this point in the history
  • Loading branch information
Hywan authored and Thomasdezeeuw committed Jun 26, 2021
1 parent 441367b commit 6eb1efa
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 26 deletions.
18 changes: 10 additions & 8 deletions src/io_source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ use std::os::windows::io::AsRawSocket;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::{fmt, io};

#[cfg(any(unix, debug_assertions))]
use crate::poll;
use crate::sys::IoSourceState;
use crate::{event, Interest, Registry, Token};

Expand Down Expand Up @@ -142,7 +140,9 @@ where
) -> io::Result<()> {
#[cfg(debug_assertions)]
self.selector_id.associate(registry)?;
poll::selector(registry).register(self.inner.as_raw_fd(), token, interests)
registry
.selector()
.register(self.inner.as_raw_fd(), token, interests)
}

fn reregister(
Expand All @@ -153,13 +153,15 @@ where
) -> io::Result<()> {
#[cfg(debug_assertions)]
self.selector_id.check_association(registry)?;
poll::selector(registry).reregister(self.inner.as_raw_fd(), token, interests)
registry
.selector()
.reregister(self.inner.as_raw_fd(), token, interests)
}

fn deregister(&mut self, registry: &Registry) -> io::Result<()> {
#[cfg(debug_assertions)]
self.selector_id.remove_association(registry)?;
poll::selector(registry).deregister(self.inner.as_raw_fd())
registry.selector().deregister(self.inner.as_raw_fd())
}
}

Expand Down Expand Up @@ -230,7 +232,7 @@ impl SelectorId {
/// Associate an I/O source with `registry`, returning an error if its
/// already registered.
fn associate(&self, registry: &Registry) -> io::Result<()> {
let registry_id = poll::selector(&registry).id();
let registry_id = registry.selector().id();
let previous_id = self.id.swap(registry_id, Ordering::AcqRel);

if previous_id == Self::UNASSOCIATED {
Expand All @@ -247,7 +249,7 @@ impl SelectorId {
/// error if its registered with a different `Registry` or not registered at
/// all.
fn check_association(&self, registry: &Registry) -> io::Result<()> {
let registry_id = poll::selector(&registry).id();
let registry_id = registry.selector().id();
let id = self.id.load(Ordering::Acquire);

if id == registry_id {
Expand All @@ -268,7 +270,7 @@ impl SelectorId {
/// Remove a previously made association from `registry`, returns an error
/// if it was not previously associated with `registry`.
fn remove_association(&self, registry: &Registry) -> io::Result<()> {
let registry_id = poll::selector(&registry).id();
let registry_id = registry.selector().id();
let previous_id = self.id.swap(Self::UNASSOCIATED, Ordering::AcqRel);

if previous_id == registry_id {
Expand Down
10 changes: 5 additions & 5 deletions src/poll.rs
Original file line number Diff line number Diff line change
Expand Up @@ -628,6 +628,11 @@ impl Registry {
panic!("Only a single `Waker` can be active per `Poll` instance");
}
}

/// Get access to the `sys::Selector`.
pub(crate) fn selector(&self) -> &sys::Selector {
&self.selector
}
}

impl fmt::Debug for Registry {
Expand All @@ -643,11 +648,6 @@ impl AsRawFd for Registry {
}
}

/// Get access to the `sys::Selector` from `Registry`.
pub(crate) fn selector(registry: &Registry) -> &sys::Selector {
&registry.selector
}

cfg_os_poll! {
#[cfg(unix)]
#[test]
Expand Down
8 changes: 4 additions & 4 deletions src/sys/unix/sourcefd.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::{event, poll, Interest, Registry, Token};
use crate::{event, Interest, Registry, Token};

use std::io;
use std::os::unix::io::RawFd;
Expand Down Expand Up @@ -98,7 +98,7 @@ impl<'a> event::Source for SourceFd<'a> {
token: Token,
interests: Interest,
) -> io::Result<()> {
poll::selector(registry).register(*self.0, token, interests)
registry.selector().register(*self.0, token, interests)
}

fn reregister(
Expand All @@ -107,10 +107,10 @@ impl<'a> event::Source for SourceFd<'a> {
token: Token,
interests: Interest,
) -> io::Result<()> {
poll::selector(registry).reregister(*self.0, token, interests)
registry.selector().reregister(*self.0, token, interests)
}

fn deregister(&mut self, registry: &Registry) -> io::Result<()> {
poll::selector(registry).deregister(*self.0)
registry.selector().deregister(*self.0)
}
}
8 changes: 5 additions & 3 deletions src/sys/windows/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ cfg_io_source! {
use std::pin::Pin;
use std::sync::{Arc, Mutex};

use crate::{poll, Interest, Registry, Token};
use crate::{Interest, Registry, Token};

struct InternalState {
selector: Arc<SelectorInner>,
Expand Down Expand Up @@ -101,7 +101,8 @@ cfg_io_source! {
if self.inner.is_some() {
Err(io::ErrorKind::AlreadyExists.into())
} else {
poll::selector(registry)
registry
.selector()
.register(socket, token, interests)
.map(|state| {
self.inner = Some(Box::new(state));
Expand All @@ -117,7 +118,8 @@ cfg_io_source! {
) -> io::Result<()> {
match self.inner.as_mut() {
Some(state) => {
poll::selector(registry)
registry
.selector()
.reregister(state.sock_state.clone(), token, interests)
.map(|()| {
state.token = token;
Expand Down
10 changes: 6 additions & 4 deletions src/sys/windows/named_pipe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use winapi::um::minwinbase::{OVERLAPPED, OVERLAPPED_ENTRY};

use crate::event::Source;
use crate::sys::windows::{Event, Overlapped};
use crate::{poll, Registry};
use crate::Registry;
use crate::{Interest, Token};

/// Non-blocking windows named pipe.
Expand Down Expand Up @@ -396,10 +396,12 @@ impl Source for NamedPipe {
}

if io.cp.is_none() {
io.cp = Some(poll::selector(registry).clone_port());
let selector = registry.selector();

io.cp = Some(selector.clone_port());

let inner_token = NEXT_TOKEN.fetch_add(2, Relaxed) + 2;
poll::selector(registry)
selector
.inner
.cp
.add_handle(inner_token, &self.inner.handle)?;
Expand Down Expand Up @@ -716,7 +718,7 @@ fn write_done(status: &OVERLAPPED_ENTRY, events: Option<&mut Vec<Event>>) {
impl Io {
fn check_association(&self, registry: &Registry, required: bool) -> io::Result<()> {
match self.cp {
Some(ref cp) if !poll::selector(registry).same_port(cp) => Err(io::Error::new(
Some(ref cp) if !registry.selector().same_port(cp) => Err(io::Error::new(
io::ErrorKind::AlreadyExists,
"I/O source already registered with a different `Registry`",
)),
Expand Down
4 changes: 2 additions & 2 deletions src/waker.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::{poll, sys, Registry, Token};
use crate::{sys, Registry, Token};

use std::io;

Expand Down Expand Up @@ -84,7 +84,7 @@ impl Waker {
pub fn new(registry: &Registry, token: Token) -> io::Result<Waker> {
#[cfg(debug_assertions)]
registry.register_waker();
sys::Waker::new(poll::selector(&registry), token).map(|inner| Waker { inner })
sys::Waker::new(registry.selector(), token).map(|inner| Waker { inner })
}

/// Wake up the [`Poll`] associated with this `Waker`.
Expand Down

0 comments on commit 6eb1efa

Please sign in to comment.