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/web_worker.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/web_worker.rs')
-rw-r--r-- | cli/ops/web_worker.rs | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/cli/ops/web_worker.rs b/cli/ops/web_worker.rs index 7bfc70a84..ae6b10abc 100644 --- a/cli/ops/web_worker.rs +++ b/cli/ops/web_worker.rs @@ -3,14 +3,14 @@ use super::dispatch_json::{JsonOp, Value}; use crate::deno_error::DenoError; use crate::deno_error::ErrorKind; use crate::ops::json_op; -use crate::state::ThreadSafeState; +use crate::state::State; use deno_core::*; use futures; use futures::future::FutureExt; use std; use std::convert::From; -pub fn init(i: &mut Isolate, s: &ThreadSafeState) { +pub fn init(i: &mut Isolate, s: &State) { i.register_op( "worker_post_message", s.core_op(json_op(s.stateful_op(op_worker_post_message))), @@ -23,14 +23,21 @@ pub fn init(i: &mut Isolate, s: &ThreadSafeState) { /// Get message from host as guest worker fn op_worker_get_message( - state: &ThreadSafeState, + state: &State, _args: Value, _data: Option<ZeroCopyBuf>, ) -> Result<JsonOp, ErrBox> { let state_ = state.clone(); let op = async move { - let c = state_.worker_channels_internal.lock().unwrap(); - let maybe_buf = c.as_ref().unwrap().get_message().await; + let fut = { + let state = state_.borrow(); + state + .worker_channels_internal + .as_ref() + .unwrap() + .get_message() + }; + let maybe_buf = fut.await; debug!("op_worker_get_message"); Ok(json!({ "data": maybe_buf })) }; @@ -40,13 +47,17 @@ fn op_worker_get_message( /// Post message to host as guest worker fn op_worker_post_message( - state: &ThreadSafeState, + state: &State, _args: Value, data: Option<ZeroCopyBuf>, ) -> Result<JsonOp, ErrBox> { let d = Vec::from(data.unwrap().as_ref()).into_boxed_slice(); - let c = state.worker_channels_internal.lock().unwrap(); - let fut = c.as_ref().unwrap().post_message(d); + let state = state.borrow(); + let fut = state + .worker_channels_internal + .as_ref() + .unwrap() + .post_message(d); futures::executor::block_on(fut) .map_err(|e| DenoError::new(ErrorKind::Other, e.to_string()))?; |