summaryrefslogtreecommitdiff
path: root/cli/tokio_util.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2019-11-07 15:59:02 +0100
committerRy Dahl <ry@tinyclouds.org>2019-11-07 09:59:02 -0500
commit415d4c2e5236f6d8dfef8865b1665f144c39a019 (patch)
treee7c936d97d077c6ba1ce79b495894d182299c96f /cli/tokio_util.rs
parentf466ef97061ffed5baf1612a646accb2cda4b772 (diff)
refactor: rewrite accept resources (#3271)
Diffstat (limited to 'cli/tokio_util.rs')
-rw-r--r--cli/tokio_util.rs73
1 files changed, 0 insertions, 73 deletions
diff --git a/cli/tokio_util.rs b/cli/tokio_util.rs
index 1341c657a..c86748b55 100644
--- a/cli/tokio_util.rs
+++ b/cli/tokio_util.rs
@@ -1,15 +1,10 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
-use crate::resources::Resource;
use deno::ErrBox;
use futures;
use futures::Future;
use futures::Poll;
-use std::io;
-use std::mem;
-use std::net::SocketAddr;
use std::ops::FnOnce;
use tokio;
-use tokio::net::TcpStream;
use tokio::runtime;
pub fn create_threadpool_runtime(
@@ -77,74 +72,6 @@ where
tokio_executor::with_default(&mut executor, &mut enter, move |_enter| f());
}
-#[derive(Debug)]
-enum AcceptState {
- Eager(Resource),
- Pending(Resource),
- Empty,
-}
-
-/// Simply accepts a connection.
-pub fn accept(r: Resource) -> Accept {
- Accept {
- state: AcceptState::Eager(r),
- }
-}
-
-/// A future which can be used to easily read available number of bytes to fill
-/// a buffer.
-///
-/// Created by the [`read`] function.
-#[derive(Debug)]
-pub struct Accept {
- state: AcceptState,
-}
-
-impl Future for Accept {
- type Item = (TcpStream, SocketAddr);
- type Error = io::Error;
-
- fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
- let (stream, addr) = match self.state {
- // Similar to try_ready!, but also track/untrack accept task
- // in TcpListener resource.
- // In this way, when the listener is closed, the task can be
- // notified to error out (instead of stuck forever).
- AcceptState::Eager(ref mut r) => match r.poll_accept() {
- Ok(futures::prelude::Async::Ready(t)) => t,
- Ok(futures::prelude::Async::NotReady) => {
- self.state = AcceptState::Pending(r.to_owned());
- return Ok(futures::prelude::Async::NotReady);
- }
- Err(e) => {
- return Err(e);
- }
- },
- AcceptState::Pending(ref mut r) => match r.poll_accept() {
- Ok(futures::prelude::Async::Ready(t)) => {
- r.untrack_task();
- t
- }
- Ok(futures::prelude::Async::NotReady) => {
- // Would error out if another accept task is being tracked.
- r.track_task()?;
- return Ok(futures::prelude::Async::NotReady);
- }
- Err(e) => {
- r.untrack_task();
- return Err(e);
- }
- },
- AcceptState::Empty => panic!("poll Accept after it's done"),
- };
-
- match mem::replace(&mut self.state, AcceptState::Empty) {
- AcceptState::Empty => panic!("invalid internal state"),
- _ => Ok((stream, addr).into()),
- }
- }
-}
-
/// `futures::future::poll_fn` only support `F: FnMut()->Poll<T, E>`
/// However, we require that `F: FnOnce()->Poll<T, E>`.
/// Therefore, we created our version of `poll_fn`.