From b088b58f7664cbb2fcb1e12f8aa439d377f56d49 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 24 Sep 2018 22:46:36 -0400 Subject: Add SetGlobalTimeout(). To be used for a timers implementation soon. --- src/handlers.rs | 10 ++++++++++ src/isolate.rs | 3 +++ src/msg.fbs | 5 +++++ 3 files changed, 18 insertions(+) (limited to 'src') diff --git a/src/handlers.rs b/src/handlers.rs index c914df36d..42becc0b0 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -45,6 +45,7 @@ pub fn msg_from_js(state: Arc, bytes: &[u8]) -> (bool, Box) { msg::Any::Start => handle_start, msg::Any::CodeFetch => handle_code_fetch, msg::Any::CodeCache => handle_code_cache, + msg::Any::SetTimeout => handle_set_timeout, msg::Any::Environ => handle_env, msg::Any::FetchReq => handle_fetch_req, msg::Any::TimerStart => handle_timer_start, @@ -236,6 +237,15 @@ fn handle_code_cache(state: Arc, base: &msg::Base) -> Box { }())) } +fn handle_set_timeout(state: Arc, base: &msg::Base) -> Box { + let msg = base.msg_as_set_timeout().unwrap(); + let val = msg.timeout() as isize; + state + .timeout + .swap(val, std::sync::atomic::Ordering::Relaxed); + ok_future(empty_buf()) +} + fn handle_set_env(state: Arc, base: &msg::Base) -> Box { let msg = base.msg_as_set_env().unwrap(); let key = msg.key().unwrap(); diff --git a/src/isolate.rs b/src/isolate.rs index 64bec5ddf..30e90be5c 100644 --- a/src/isolate.rs +++ b/src/isolate.rs @@ -16,6 +16,7 @@ use std; use std::collections::HashMap; use std::ffi::CStr; use std::ffi::CString; +use std::sync::atomic::AtomicIsize; use std::sync::mpsc; use std::sync::Arc; use std::sync::Mutex; @@ -48,6 +49,7 @@ pub struct Isolate { // Isolate cannot be passed between threads but IsolateState can. So any state that // needs to be accessed outside the main V8 thread should be inside IsolateState. pub struct IsolateState { + pub timeout: AtomicIsize, pub dir: deno_dir::DenoDir, pub timers: Mutex>>, pub argv: Vec, @@ -85,6 +87,7 @@ impl Isolate { rx, ntasks: 0, state: Arc::new(IsolateState { + timeout: AtomicIsize::new(-1), dir: deno_dir::DenoDir::new(flags.reload, None).unwrap(), timers: Mutex::new(HashMap::new()), argv: argv_rest, diff --git a/src/msg.fbs b/src/msg.fbs index 6358668b7..52eba8ca6 100644 --- a/src/msg.fbs +++ b/src/msg.fbs @@ -4,6 +4,7 @@ union Any { CodeFetch, CodeFetchRes, CodeCache, + SetTimeout, Exit, TimerStart, TimerReady, @@ -115,6 +116,10 @@ table CodeCache { output_code: string; } +table SetTimeout { + timeout: int; +} + table Exit { code: int; } -- cgit v1.2.3