From 3b8f1695ff7f9fa4d6fed42b98213a34a26a6fb9 Mon Sep 17 00:00:00 2001 From: Alan Somers Date: Sat, 18 Feb 2017 23:09:53 -0700 Subject: [PATCH 1/2] Define constants to replace magic numbers --- src/reactor/mod.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/reactor/mod.rs b/src/reactor/mod.rs index 914e3fc37..5cd047c58 100644 --- a/src/reactor/mod.rs +++ b/src/reactor/mod.rs @@ -136,6 +136,13 @@ enum Message { Run(Box), } +#[repr(usize)] +#[derive(Clone, Copy, Debug, PartialEq)] +enum Readiness { + Readable = 1, + Writable = 2, +} + const TOKEN_MESSAGES: mio::Token = mio::Token(0); const TOKEN_FUTURE: mio::Token = mio::Token(1); const TOKEN_START: usize = 2; @@ -320,11 +327,13 @@ impl Core { if let Some(io) = inner.io_dispatch.get_mut(token) { if ready.is_readable() || ready.is_hup() { reader = io.reader.take(); - io.readiness.fetch_or(1, Ordering::Relaxed); + io.readiness.fetch_or(Readiness::Readable as usize, + Ordering::Relaxed); } if ready.is_writable() { writer = io.writer.take(); - io.readiness.fetch_or(2, Ordering::Relaxed); + io.readiness.fetch_or(Readiness::Writable as usize, + Ordering::Relaxed); } } drop(inner); @@ -471,8 +480,8 @@ impl Inner { debug!("scheduling direction for: {}", token); let sched = self.io_dispatch.get_mut(token).unwrap(); let (slot, bit) = match dir { - Direction::Read => (&mut sched.reader, 1), - Direction::Write => (&mut sched.writer, 2), + Direction::Read => (&mut sched.reader, Readiness::Readable as usize), + Direction::Write => (&mut sched.writer, Readiness::Writable as usize), }; if sched.readiness.load(Ordering::SeqCst) & bit != 0 { *slot = None; From eb66ff3ad1706b0206363db80a321a6c948505b3 Mon Sep 17 00:00:00 2001 From: Alan Somers Date: Mon, 6 Mar 2017 20:16:12 -0700 Subject: [PATCH 2/2] Replace more instances of magic numbers --- src/reactor/poll_evented.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/reactor/poll_evented.rs b/src/reactor/poll_evented.rs index 351276462..245c1d557 100644 --- a/src/reactor/poll_evented.rs +++ b/src/reactor/poll_evented.rs @@ -14,6 +14,7 @@ use mio; use io::Io; use reactor::{Handle, Remote}; +use reactor::Readiness::*; use reactor::io_token::IoToken; /// A concrete implementation of a stream of readiness notifications for I/O @@ -89,11 +90,11 @@ impl PollEvented { /// to call from within the context of a future's task, typically done in a /// `Future::poll` method. pub fn poll_read(&self) -> Async<()> { - if self.readiness.load(Ordering::SeqCst) & 1 != 0 { + if self.readiness.load(Ordering::SeqCst) & Readable as usize != 0 { return Async::Ready(()) } self.readiness.fetch_or(self.token.take_readiness(), Ordering::SeqCst); - if self.readiness.load(Ordering::SeqCst) & 1 != 0 { + if self.readiness.load(Ordering::SeqCst) & Readable as usize != 0 { Async::Ready(()) } else { self.token.schedule_read(&self.handle); @@ -109,11 +110,11 @@ impl PollEvented { /// to call from within the context of a future's task, typically done in a /// `Future::poll` method. pub fn poll_write(&self) -> Async<()> { - if self.readiness.load(Ordering::SeqCst) & 2 != 0 { + if self.readiness.load(Ordering::SeqCst) & Writable as usize != 0 { return Async::Ready(()) } self.readiness.fetch_or(self.token.take_readiness(), Ordering::SeqCst); - if self.readiness.load(Ordering::SeqCst) & 2 != 0 { + if self.readiness.load(Ordering::SeqCst) & Writable as usize != 0 { Async::Ready(()) } else { self.token.schedule_write(&self.handle); @@ -137,7 +138,7 @@ impl PollEvented { /// previously indicated that the object is readable. That is, this function /// must always be paired with calls to `poll_read` previously. pub fn need_read(&self) { - self.readiness.fetch_and(!1, Ordering::SeqCst); + self.readiness.fetch_and(!(Readable as usize), Ordering::SeqCst); self.token.schedule_read(&self.handle) } @@ -157,7 +158,7 @@ impl PollEvented { /// previously indicated that the object is writable. That is, this function /// must always be paired with calls to `poll_write` previously. pub fn need_write(&self) { - self.readiness.fetch_and(!2, Ordering::SeqCst); + self.readiness.fetch_and(!(Writable as usize), Ordering::SeqCst); self.token.schedule_write(&self.handle) }