diff options
Diffstat (limited to 'cli/ops/signal.rs')
-rw-r--r-- | cli/ops/signal.rs | 40 |
1 files changed, 13 insertions, 27 deletions
diff --git a/cli/ops/signal.rs b/cli/ops/signal.rs index 8c0b338b3..c0b1220e0 100644 --- a/cli/ops/signal.rs +++ b/cli/ops/signal.rs @@ -1,35 +1,26 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -use super::dispatch_json::Value; + use crate::state::State; use deno_core::BufVec; -use deno_core::CoreIsolate; use deno_core::ErrBox; -use deno_core::ResourceTable; +use deno_core::OpRegistry; use deno_core::ZeroCopyBuf; -use std::cell::RefCell; +use serde_json::Value; use std::rc::Rc; #[cfg(unix)] -use super::dispatch_json::Deserialize; -#[cfg(unix)] use futures::future::poll_fn; #[cfg(unix)] +use serde_derive::Deserialize; +#[cfg(unix)] use std::task::Waker; #[cfg(unix)] use tokio::signal::unix::{signal, Signal, SignalKind}; -pub fn init(i: &mut CoreIsolate, s: &Rc<State>) { - let t = &CoreIsolate::state(i).borrow().resource_table.clone(); - - i.register_op("op_signal_bind", s.stateful_json_op_sync(t, op_signal_bind)); - i.register_op( - "op_signal_unbind", - s.stateful_json_op_sync(t, op_signal_unbind), - ); - i.register_op( - "op_signal_poll", - s.stateful_json_op_async(t, op_signal_poll), - ); +pub fn init(s: &Rc<State>) { + s.register_op_json_sync("op_signal_bind", op_signal_bind); + s.register_op_json_sync("op_signal_unbind", op_signal_unbind); + s.register_op_json_async("op_signal_poll", op_signal_poll); } #[cfg(unix)] @@ -52,13 +43,12 @@ struct SignalArgs { #[cfg(unix)] fn op_signal_bind( state: &State, - resource_table: &mut ResourceTable, args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result<Value, ErrBox> { state.check_unstable("Deno.signal"); let args: BindSignalArgs = serde_json::from_value(args)?; - let rid = resource_table.add( + let rid = state.resource_table.borrow_mut().add( "signal", Box::new(SignalStreamResource( signal(SignalKind::from_raw(args.signo)).expect(""), @@ -73,7 +63,6 @@ fn op_signal_bind( #[cfg(unix)] async fn op_signal_poll( state: Rc<State>, - resource_table: Rc<RefCell<ResourceTable>>, args: Value, _zero_copy: BufVec, ) -> Result<Value, ErrBox> { @@ -82,7 +71,7 @@ async fn op_signal_poll( let rid = args.rid as u32; let future = poll_fn(move |cx| { - let mut resource_table = resource_table.borrow_mut(); + let mut resource_table = state.resource_table.borrow_mut(); if let Some(mut signal) = resource_table.get_mut::<SignalStreamResource>(rid) { @@ -98,14 +87,14 @@ async fn op_signal_poll( #[cfg(unix)] pub fn op_signal_unbind( state: &State, - resource_table: &mut ResourceTable, args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result<Value, ErrBox> { state.check_unstable("Deno.signal"); + let mut resource_table = state.resource_table.borrow_mut(); let args: SignalArgs = serde_json::from_value(args)?; let rid = args.rid as u32; - let resource = resource_table.get::<SignalStreamResource>(rid); + let resource = resource_table.get_mut::<SignalStreamResource>(rid); if let Some(signal) = resource { if let Some(waker) = &signal.1 { // Wakes up the pending poll if exists. @@ -122,7 +111,6 @@ pub fn op_signal_unbind( #[cfg(not(unix))] pub fn op_signal_bind( _state: &State, - _resource_table: &mut ResourceTable, _args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result<Value, ErrBox> { @@ -132,7 +120,6 @@ pub fn op_signal_bind( #[cfg(not(unix))] fn op_signal_unbind( _state: &State, - _resource_table: &mut ResourceTable, _args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result<Value, ErrBox> { @@ -142,7 +129,6 @@ fn op_signal_unbind( #[cfg(not(unix))] async fn op_signal_poll( _state: Rc<State>, - _resource_table: Rc<RefCell<ResourceTable>>, _args: Value, _zero_copy: BufVec, ) -> Result<Value, ErrBox> { |