diff options
Diffstat (limited to 'cli/ops')
-rw-r--r-- | cli/ops/files.rs | 5 | ||||
-rw-r--r-- | cli/ops/process.rs | 2 | ||||
-rw-r--r-- | cli/ops/repl.rs | 26 | ||||
-rw-r--r-- | cli/ops/resources.rs | 5 | ||||
-rw-r--r-- | cli/ops/workers.rs | 2 |
5 files changed, 29 insertions, 11 deletions
diff --git a/cli/ops/files.rs b/cli/ops/files.rs index 0432acd82..c1e43ff95 100644 --- a/cli/ops/files.rs +++ b/cli/ops/files.rs @@ -1,5 +1,6 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. use super::dispatch_json::{Deserialize, JsonOp, Value}; +use crate::deno_error::bad_resource; use crate::fs as deno_fs; use crate::ops::json_op; use crate::resources; @@ -110,8 +111,8 @@ fn op_close( ) -> Result<JsonOp, ErrBox> { let args: CloseArgs = serde_json::from_value(args)?; - let resource = resources::lookup(args.rid as u32)?; - resource.close(); + let mut table = resources::lock_resource_table(); + table.close(args.rid as u32).ok_or_else(bad_resource)?; Ok(JsonOp::Sync(json!({}))) } diff --git a/cli/ops/process.rs b/cli/ops/process.rs index 5b59aa030..c6dd2f2d3 100644 --- a/cli/ops/process.rs +++ b/cli/ops/process.rs @@ -99,7 +99,7 @@ fn op_run( let resources = resources::add_child(child); Ok(JsonOp::Sync(json!({ - "rid": resources.child_rid, + "rid": resources.child_rid.unwrap(), "pid": pid, "stdinRid": resources.stdin_rid, "stdoutRid": resources.stdout_rid, diff --git a/cli/ops/repl.rs b/cli/ops/repl.rs index 886e57483..6644ab159 100644 --- a/cli/ops/repl.rs +++ b/cli/ops/repl.rs @@ -1,10 +1,15 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. use super::dispatch_json::{blocking_json, Deserialize, JsonOp, Value}; +use crate::deno_error::bad_resource; use crate::ops::json_op; use crate::repl; +use crate::repl::Repl; use crate::resources; +use crate::resources::CoreResource; use crate::state::ThreadSafeState; use deno::*; +use std::sync::Arc; +use std::sync::Mutex; pub fn init(i: &mut Isolate, s: &ThreadSafeState) { i.register_op( @@ -17,6 +22,14 @@ pub fn init(i: &mut Isolate, s: &ThreadSafeState) { ); } +struct ReplResource(Arc<Mutex<Repl>>); + +impl CoreResource for ReplResource { + fn inspect_repr(&self) -> &str { + "repl" + } +} + #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct ReplStartArgs { @@ -33,9 +46,10 @@ fn op_repl_start( debug!("op_repl_start {}", args.history_file); let history_path = repl::history_path(&state.dir, &args.history_file); let repl = repl::Repl::new(history_path); - let resource = resources::add_repl(repl); - - Ok(JsonOp::Sync(json!(resource.rid))) + let resource = ReplResource(Arc::new(Mutex::new(repl))); + let mut table = resources::lock_resource_table(); + let rid = table.add(Box::new(resource)); + Ok(JsonOp::Sync(json!(rid))) } #[derive(Deserialize)] @@ -50,12 +64,14 @@ fn op_repl_readline( _zero_copy: Option<PinnedBuf>, ) -> Result<JsonOp, ErrBox> { let args: ReplReadlineArgs = serde_json::from_value(args)?; - let rid = args.rid; + let rid = args.rid as u32; let prompt = args.prompt; debug!("op_repl_readline {} {}", rid, prompt); blocking_json(false, move || { - let repl = resources::get_repl(rid as u32)?; + let table = resources::lock_resource_table(); + let resource = table.get::<ReplResource>(rid).ok_or_else(bad_resource)?; + let repl = resource.0.clone(); let line = repl.lock().unwrap().readline(&prompt)?; Ok(json!(line)) }) diff --git a/cli/ops/resources.rs b/cli/ops/resources.rs index 8397e9563..d92c6a83c 100644 --- a/cli/ops/resources.rs +++ b/cli/ops/resources.rs @@ -1,7 +1,7 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. use super::dispatch_json::{JsonOp, Value}; use crate::ops::json_op; -use crate::resources::table_entries; +use crate::resources::lock_resource_table; use crate::state::ThreadSafeState; use deno::*; @@ -14,6 +14,7 @@ fn op_resources( _args: Value, _zero_copy: Option<PinnedBuf>, ) -> Result<JsonOp, ErrBox> { - let serialized_resources = table_entries(); + let resource_table = lock_resource_table(); + let serialized_resources = resource_table.entries(); Ok(JsonOp::Sync(json!(serialized_resources))) } diff --git a/cli/ops/workers.rs b/cli/ops/workers.rs index 670ca6b47..809aa5d9b 100644 --- a/cli/ops/workers.rs +++ b/cli/ops/workers.rs @@ -250,7 +250,7 @@ fn op_host_post_message( let d = Vec::from(data.unwrap().as_ref()).into_boxed_slice(); - resources::post_message_to_worker(rid, d) + resources::post_message_to_worker(rid, d)? .wait() .map_err(|e| DenoError::new(ErrorKind::Other, e.to_string()))?; |