From cdba5ab6fc633606aaa6f95d0825832c3ac6fe5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sat, 8 Feb 2020 20:34:31 +0100 Subject: refactor: rename ThreadSafeState, use RefCell for mutable state (#3931) * rename ThreadSafeState to State * State stores InnerState wrapped in Rc and RefCell --- cli/ops/net.rs | 57 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 24 deletions(-) (limited to 'cli/ops/net.rs') diff --git a/cli/ops/net.rs b/cli/ops/net.rs index 5b35d9287..569aebca0 100644 --- a/cli/ops/net.rs +++ b/cli/ops/net.rs @@ -4,7 +4,7 @@ use super::io::StreamResource; use crate::deno_error::bad_resource; use crate::ops::json_op; use crate::resolve_addr::resolve_addr; -use crate::state::ThreadSafeState; +use crate::state::State; use deno_core::*; use futures::future::FutureExt; use std; @@ -19,7 +19,7 @@ use tokio; use tokio::net::TcpListener; use tokio::net::TcpStream; -pub fn init(i: &mut Isolate, s: &ThreadSafeState) { +pub fn init(i: &mut Isolate, s: &State) { i.register_op("accept", s.core_op(json_op(s.stateful_op(op_accept)))); i.register_op("connect", s.core_op(json_op(s.stateful_op(op_connect)))); i.register_op("shutdown", s.core_op(json_op(s.stateful_op(op_shutdown)))); @@ -33,7 +33,7 @@ enum AcceptState { } /// Simply accepts a connection. -pub fn accept(state: &ThreadSafeState, rid: ResourceId) -> Accept { +pub fn accept(state: &State, rid: ResourceId) -> Accept { Accept { accept_state: AcceptState::Pending, rid, @@ -45,7 +45,7 @@ pub fn accept(state: &ThreadSafeState, rid: ResourceId) -> Accept { pub struct Accept<'a> { accept_state: AcceptState, rid: ResourceId, - state: &'a ThreadSafeState, + state: &'a State, } impl Future for Accept<'_> { @@ -57,8 +57,9 @@ impl Future for Accept<'_> { panic!("poll Accept after it's done"); } - let mut table = inner.state.lock_resource_table(); - let listener_resource = table + let mut state = inner.state.borrow_mut(); + let listener_resource = state + .resource_table .get_mut::(inner.rid) .ok_or_else(|| { let e = std::io::Error::new( @@ -95,25 +96,29 @@ struct AcceptArgs { } fn op_accept( - state: &ThreadSafeState, + state: &State, args: Value, _zero_copy: Option, ) -> Result { let args: AcceptArgs = serde_json::from_value(args)?; let rid = args.rid as u32; let state_ = state.clone(); - let table = state.lock_resource_table(); - table - .get::(rid) - .ok_or_else(bad_resource)?; + { + let state = state.borrow(); + state + .resource_table + .get::(rid) + .ok_or_else(bad_resource)?; + } let op = async move { let (tcp_stream, _socket_addr) = accept(&state_, rid).await?; let local_addr = tcp_stream.local_addr()?; let remote_addr = tcp_stream.peer_addr()?; - let mut table = state_.lock_resource_table(); - let rid = - table.add("tcpStream", Box::new(StreamResource::TcpStream(tcp_stream))); + let mut state = state_.borrow_mut(); + let rid = state + .resource_table + .add("tcpStream", Box::new(StreamResource::TcpStream(tcp_stream))); Ok(json!({ "rid": rid, "localAddr": { @@ -140,7 +145,7 @@ struct ConnectArgs { } fn op_connect( - state: &ThreadSafeState, + state: &State, args: Value, _zero_copy: Option, ) -> Result { @@ -154,9 +159,10 @@ fn op_connect( let tcp_stream = TcpStream::connect(&addr).await?; let local_addr = tcp_stream.local_addr()?; let remote_addr = tcp_stream.peer_addr()?; - let mut table = state_.lock_resource_table(); - let rid = - table.add("tcpStream", Box::new(StreamResource::TcpStream(tcp_stream))); + let mut state = state_.borrow_mut(); + let rid = state + .resource_table + .add("tcpStream", Box::new(StreamResource::TcpStream(tcp_stream))); Ok(json!({ "rid": rid, "localAddr": { @@ -182,7 +188,7 @@ struct ShutdownArgs { } fn op_shutdown( - state: &ThreadSafeState, + state: &State, args: Value, _zero_copy: Option, ) -> Result { @@ -197,8 +203,9 @@ fn op_shutdown( _ => unimplemented!(), }; - let mut table = state.lock_resource_table(); - let resource = table + let mut state = state.borrow_mut(); + let resource = state + .resource_table .get_mut::(rid) .ok_or_else(bad_resource)?; match resource { @@ -272,7 +279,7 @@ impl TcpListenerResource { } fn op_listen( - state: &ThreadSafeState, + state: &State, args: Value, _zero_copy: Option, ) -> Result { @@ -290,8 +297,10 @@ fn op_listen( waker: None, local_addr, }; - let mut table = state.lock_resource_table(); - let rid = table.add("tcpListener", Box::new(listener_resource)); + let mut state = state.borrow_mut(); + let rid = state + .resource_table + .add("tcpListener", Box::new(listener_resource)); debug!( "New listener {} {}:{}", rid, -- cgit v1.2.3