summaryrefslogtreecommitdiff
path: root/cli/ops/web_worker.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-02-08 20:34:31 +0100
committerGitHub <noreply@github.com>2020-02-08 20:34:31 +0100
commitcdba5ab6fc633606aaa6f95d0825832c3ac6fe5c (patch)
treee8dee2801e14b65b2da6aca62e39cd3d3ac2a786 /cli/ops/web_worker.rs
parent619a24390ff15d5ea5e577a4d0391823f94e8592 (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.rs27
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()))?;