From 4eeda9ea278f7b3b88d681e56a14666dc7e76548 Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Tue, 2 Oct 2018 23:21:56 -0700 Subject: [PATCH] timers: remove the old timer implementation Fixes #878. --- src/handlers.rs | 94 ------------------------------------------------- src/isolate.rs | 5 +-- src/msg.fbs | 17 --------- 3 files changed, 1 insertion(+), 115 deletions(-) diff --git a/src/handlers.rs b/src/handlers.rs index bb2d79e6..c7e7ab7c 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -13,7 +13,6 @@ use msg; use flatbuffers::FlatBufferBuilder; use futures; use futures::future::poll_fn; -use futures::sync::oneshot; use futures::Poll; use hyper; use hyper::rt::{Future, Stream}; @@ -30,7 +29,6 @@ use std::sync::Arc; use std::time::UNIX_EPOCH; use std::time::{Duration, Instant}; use tokio; -use tokio::timer::Delay; use tokio_io; use tokio_threadpool; @@ -71,8 +69,6 @@ pub fn msg_from_js( msg::Any::CodeCache => handle_code_cache, msg::Any::Environ => handle_env, msg::Any::FetchReq => handle_fetch_req, - msg::Any::TimerStart => handle_timer_start, - msg::Any::TimerClear => handle_timer_clear, msg::Any::MakeTempDir => handle_make_temp_dir, msg::Any::Mkdir => handle_mkdir, msg::Any::Open => handle_open, @@ -446,30 +442,6 @@ fn handle_fetch_req( Box::new(future) } -fn set_timeout( - cb: F, - delay: u32, -) -> ( - impl Future, - futures::sync::oneshot::Sender<()>, -) -where - F: FnOnce() -> (), -{ - let (cancel_tx, cancel_rx) = oneshot::channel::<()>(); - let when = Instant::now() + Duration::from_millis(delay.into()); - let delay_task = Delay::new(when) - .map_err(|e| panic!("timer failed; err={:?}", e)) - .and_then(|_| { - cb(); - Ok(()) - }).select(cancel_rx) - .map(|_| ()) - .map_err(|_| ()); - - (delay_task, cancel_tx) -} - // This is just type conversion. Implement From trait? // See https://github.com/tokio-rs/tokio/blob/ffd73a64e7ec497622b7f939e38017afe7124dc4/tokio-fs/src/lib.rs#L76-L85 fn convert_blocking(f: F) -> Poll @@ -865,72 +837,6 @@ fn handle_write_file( }) } -fn remove_timer(state: Arc, timer_id: u32) { - let mut timers = state.timers.lock().unwrap(); - timers.remove(&timer_id); -} - -// Prototype: https://github.com/ry/isolate/blob/golang/timers.go#L25-L39 -fn handle_timer_start( - state: Arc, - base: &msg::Base, - data: &'static mut [u8], -) -> Box { - assert_eq!(data.len(), 0); - debug!("handle_timer_start"); - let msg = base.msg_as_timer_start().unwrap(); - let cmd_id = base.cmd_id(); - let timer_id = msg.id(); - let delay = msg.delay(); - - let config2 = state.clone(); - let future = { - let (delay_task, cancel_delay) = set_timeout( - move || { - remove_timer(config2, timer_id); - }, - delay, - ); - let mut timers = state.timers.lock().unwrap(); - timers.insert(timer_id, cancel_delay); - delay_task - }; - let r = Box::new(future.then(move |result| { - let builder = &mut FlatBufferBuilder::new(); - let msg = msg::TimerReady::create( - builder, - &msg::TimerReadyArgs { - id: timer_id, - canceled: result.is_err(), - ..Default::default() - }, - ); - Ok(serialize_response( - cmd_id, - builder, - msg::BaseArgs { - msg: Some(msg.as_union_value()), - msg_type: msg::Any::TimerReady, - ..Default::default() - }, - )) - })); - r -} - -// Prototype: https://github.com/ry/isolate/blob/golang/timers.go#L40-L43 -fn handle_timer_clear( - state: Arc, - base: &msg::Base, - data: &'static mut [u8], -) -> Box { - assert_eq!(data.len(), 0); - let msg = base.msg_as_timer_clear().unwrap(); - debug!("handle_timer_clear"); - remove_timer(state, msg.id()); - ok_future(empty_buf()) -} - fn handle_rename( state: Arc, base: &msg::Base, diff --git a/src/isolate.rs b/src/isolate.rs index bdd1ca95..0976bd76 100644 --- a/src/isolate.rs +++ b/src/isolate.rs @@ -9,11 +9,9 @@ use errors::DenoError; use flags; use libdeno; -use futures; use futures::Future; use libc::c_void; use std; -use std::collections::HashMap; use std::ffi::CStr; use std::ffi::CString; use std::sync::mpsc; @@ -54,7 +52,6 @@ pub struct Isolate { // needs to be accessed outside the main V8 thread should be inside IsolateState. pub struct IsolateState { pub dir: deno_dir::DenoDir, - pub timers: Mutex>>, pub argv: Vec, pub flags: flags::DenoFlags, tx: Mutex>>, @@ -92,7 +89,6 @@ impl Isolate { timeout_due: None, state: Arc::new(IsolateState { dir: deno_dir::DenoDir::new(flags.reload, None).unwrap(), - timers: Mutex::new(HashMap::new()), argv: argv_rest, flags, tx: Mutex::new(Some(tx)), @@ -280,6 +276,7 @@ extern "C" fn pre_dispatch( #[cfg(test)] mod tests { use super::*; + use futures; #[test] fn test_c_to_rust() { diff --git a/src/msg.fbs b/src/msg.fbs index 68de166c..e4886b6a 100644 --- a/src/msg.fbs +++ b/src/msg.fbs @@ -6,9 +6,6 @@ union Any { CodeCache, SetTimeout, Exit, - TimerStart, - TimerReady, - TimerClear, Environ, EnvironRes, FetchReq, @@ -135,20 +132,6 @@ table Exit { code: int; } -table TimerStart { - id: uint; - delay: uint; -} - -table TimerReady { - id: uint; - canceled: bool; -} - -table TimerClear { - id: uint; -} - table Environ {} table SetEnv { -- GitLab