diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2020-04-21 09:48:44 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-21 09:48:44 -0400 |
commit | cc1720132a9c875d377c559d301bccdda2fb71c1 (patch) | |
tree | bba93c08ab0eaea148e754381b5a668f1a88ca28 /cli/ops/net_unix.rs | |
parent | ef6ee25e09c902e1f9d89a40cf05660432e7143c (diff) |
Move resource_table from deno::State to deno_core::Isolate (#4834)
Diffstat (limited to 'cli/ops/net_unix.rs')
-rw-r--r-- | cli/ops/net_unix.rs | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/cli/ops/net_unix.rs b/cli/ops/net_unix.rs index 43778e7c6..e3052e410 100644 --- a/cli/ops/net_unix.rs +++ b/cli/ops/net_unix.rs @@ -1,7 +1,6 @@ use super::dispatch_json::{Deserialize, JsonOp}; use super::io::{StreamResource, StreamResourceHolder}; use crate::op_error::OpError; -use crate::state::State; use futures::future::FutureExt; use deno_core::*; @@ -27,31 +26,35 @@ pub struct UnixListenArgs { } pub fn accept_unix( - state: &State, + isolate: &mut deno_core::Isolate, rid: u32, _zero_copy: Option<ZeroCopyBuf>, ) -> Result<JsonOp, OpError> { - let state_ = state.clone(); + let resource_table = isolate.resource_table.clone(); { - let state = state.borrow(); - state - .resource_table + let _ = resource_table + .borrow() .get::<UnixListenerResource>(rid) .ok_or_else(OpError::bad_resource_id)?; } let op = async move { - let mut state = state_.borrow_mut(); - let listener_resource = state - .resource_table - .get_mut::<UnixListenerResource>(rid) - .ok_or_else(|| { - OpError::bad_resource("Listener has been closed".to_string()) - })?; + let mut resource_table_ = resource_table.borrow_mut(); + let listener_resource = { + resource_table_ + .get_mut::<UnixListenerResource>(rid) + .ok_or_else(|| { + OpError::bad_resource("Listener has been closed".to_string()) + })? + }; + let (unix_stream, _socket_addr) = listener_resource.listener.accept().await?; + drop(resource_table_); + let local_addr = unix_stream.local_addr()?; let remote_addr = unix_stream.peer_addr()?; - let rid = state.resource_table.add( + let mut resource_table_ = resource_table.borrow_mut(); + let rid = resource_table_.add( "unixStream", Box::new(StreamResourceHolder::new(StreamResource::UnixStream( unix_stream, @@ -74,17 +77,16 @@ pub fn accept_unix( } pub fn receive_unix_packet( - state: &State, + isolate: &mut deno_core::Isolate, rid: u32, zero_copy: Option<ZeroCopyBuf>, ) -> Result<JsonOp, OpError> { let mut buf = zero_copy.unwrap(); - let state_ = state.clone(); + let resource_table = isolate.resource_table.clone(); let op = async move { - let mut state = state_.borrow_mut(); - let resource = state - .resource_table + let mut resource_table_ = resource_table.borrow_mut(); + let resource = resource_table_ .get_mut::<UnixDatagramResource>(rid) .ok_or_else(|| { OpError::bad_resource("Socket has been closed".to_string()) @@ -103,28 +105,24 @@ pub fn receive_unix_packet( } pub fn listen_unix( - state: &State, + resource_table: &mut ResourceTable, addr: &Path, ) -> Result<(u32, unix::net::SocketAddr), OpError> { - let mut state = state.borrow_mut(); if addr.exists() { remove_file(&addr).unwrap(); } let listener = UnixListener::bind(&addr)?; let local_addr = listener.local_addr()?; let listener_resource = UnixListenerResource { listener }; - let rid = state - .resource_table - .add("unixListener", Box::new(listener_resource)); + let rid = resource_table.add("unixListener", Box::new(listener_resource)); Ok((rid, local_addr)) } pub fn listen_unix_packet( - state: &State, + resource_table: &mut ResourceTable, addr: &Path, ) -> Result<(u32, unix::net::SocketAddr), OpError> { - let mut state = state.borrow_mut(); if addr.exists() { remove_file(&addr).unwrap(); } @@ -134,9 +132,7 @@ pub fn listen_unix_packet( socket, local_addr: local_addr.clone(), }; - let rid = state - .resource_table - .add("unixDatagram", Box::new(datagram_resource)); + let rid = resource_table.add("unixDatagram", Box::new(datagram_resource)); Ok((rid, local_addr)) } |