Merge pull request #174 from asomers/aioprep

Replace magic numbers with constants from mio
This commit is contained in:
Alex Crichton
2017-03-07 08:58:37 -06:00
committed by GitHub
2 changed files with 20 additions and 10 deletions
+7 -6
View File
@@ -15,6 +15,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
@@ -98,11 +99,11 @@ impl<E> PollEvented<E> {
/// 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);
@@ -118,11 +119,11 @@ impl<E> PollEvented<E> {
/// 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);
@@ -146,7 +147,7 @@ impl<E> PollEvented<E> {
/// 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)
}
@@ -166,7 +167,7 @@ impl<E> PollEvented<E> {
/// 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)
}