diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-02-08 20:34:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-08 20:34:31 +0100 |
commit | cdba5ab6fc633606aaa6f95d0825832c3ac6fe5c (patch) | |
tree | e8dee2801e14b65b2da6aca62e39cd3d3ac2a786 /cli/ops/process.rs | |
parent | 619a24390ff15d5ea5e577a4d0391823f94e8592 (diff) |
refactor: rename ThreadSafeState, use RefCell for mutable state (#3931)
* rename ThreadSafeState to State
* State stores InnerState wrapped in Rc and RefCell
Diffstat (limited to 'cli/ops/process.rs')
-rw-r--r-- | cli/ops/process.rs | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/cli/ops/process.rs b/cli/ops/process.rs index 1ffd6b78e..e93bcbc0f 100644 --- a/cli/ops/process.rs +++ b/cli/ops/process.rs @@ -4,12 +4,11 @@ use super::io::StreamResource; use crate::deno_error::bad_resource; use crate::ops::json_op; use crate::signal::kill; -use crate::state::ThreadSafeState; +use crate::state::State; use deno_core::*; use futures; use futures::future::FutureExt; use futures::future::TryFutureExt; -use futures::task::SpawnExt; use std; use std::convert::From; use std::future::Future; @@ -22,7 +21,7 @@ use tokio::process::Command; #[cfg(unix)] use std::os::unix::process::ExitStatusExt; -pub fn init(i: &mut Isolate, s: &ThreadSafeState) { +pub fn init(i: &mut Isolate, s: &State) { i.register_op("run", s.core_op(json_op(s.stateful_op(op_run)))); i.register_op( "run_status", @@ -31,12 +30,10 @@ pub fn init(i: &mut Isolate, s: &ThreadSafeState) { i.register_op("kill", s.core_op(json_op(s.stateful_op(op_kill)))); } -fn clone_file( - rid: u32, - state: &ThreadSafeState, -) -> Result<std::fs::File, ErrBox> { - let mut table = state.lock_resource_table(); - let repr = table +fn clone_file(rid: u32, state: &State) -> Result<std::fs::File, ErrBox> { + let mut state = state.borrow_mut(); + let repr = state + .resource_table .get_mut::<StreamResource>(rid) .ok_or_else(bad_resource)?; let file = match repr { @@ -76,7 +73,7 @@ struct ChildResource { } fn op_run( - state: &ThreadSafeState, + state: &State, args: Value, _zero_copy: Option<ZeroCopyBuf>, ) -> Result<JsonOp, ErrBox> { @@ -131,7 +128,8 @@ fn op_run( let mut child = c.spawn()?; let pid = child.id(); - let mut table = state_.lock_resource_table(); + let mut state = state_.borrow_mut(); + let table = &mut state.resource_table; let stdin_rid = match child.stdin.take() { Some(child_stdin) => { @@ -180,7 +178,7 @@ fn op_run( pub struct ChildStatus { rid: ResourceId, - state: ThreadSafeState, + state: State, } impl Future for ChildStatus { @@ -188,8 +186,9 @@ impl Future for ChildStatus { fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> { let inner = self.get_mut(); - let mut table = inner.state.lock_resource_table(); - let child_resource = table + let mut state = inner.state.borrow_mut(); + let child_resource = state + .resource_table .get_mut::<ChildResource>(inner.rid) .ok_or_else(bad_resource)?; let child = &mut child_resource.child; @@ -204,7 +203,7 @@ struct RunStatusArgs { } fn op_run_status( - state: &ThreadSafeState, + state: &State, args: Value, _zero_copy: Option<ZeroCopyBuf>, ) -> Result<JsonOp, ErrBox> { @@ -239,10 +238,7 @@ fn op_run_status( })) }; - let pool = futures::executor::ThreadPool::new().unwrap(); - let handle = pool.spawn_with_handle(future).unwrap(); - - Ok(JsonOp::Async(handle.boxed())) + Ok(JsonOp::Async(future.boxed_local())) } #[derive(Deserialize)] @@ -252,7 +248,7 @@ struct KillArgs { } fn op_kill( - state: &ThreadSafeState, + state: &State, args: Value, _zero_copy: Option<ZeroCopyBuf>, ) -> Result<JsonOp, ErrBox> { |