diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/resources.rs | 3 | ||||
-rw-r--r-- | src/tokio_util.rs | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/resources.rs b/src/resources.rs index 59167275b..6a15e378c 100644 --- a/src/resources.rs +++ b/src/resources.rs @@ -202,7 +202,8 @@ impl Resource { let mut table = RESOURCE_TABLE.lock().unwrap(); // Only untrack if is TcpListener. if let Some(Repr::TcpListener(_, t)) = table.get_mut(&self.rid) { - assert!(t.is_some()); + // DO NOT assert is_some here. + // See reasoning in Accept::poll(). t.take(); } } diff --git a/src/tokio_util.rs b/src/tokio_util.rs index 5322f2955..3dddff9c2 100644 --- a/src/tokio_util.rs +++ b/src/tokio_util.rs @@ -69,6 +69,10 @@ impl Future for Accept { // notified to error out (instead of stuck forever). AcceptState::Pending(ref mut r) => match r.poll_accept() { Ok(futures::prelude::Async::Ready(t)) => { + // Notice: it is possible to be Ready on the first poll. + // When eager accept fails due to WouldBlock, + // a next poll() might still be immediately Ready. + // See https://github.com/denoland/deno/issues/1756. r.untrack_task(); t } |