summaryrefslogtreecommitdiff
path: root/cli/worker.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/worker.rs')
-rw-r--r--cli/worker.rs68
1 files changed, 29 insertions, 39 deletions
diff --git a/cli/worker.rs b/cli/worker.rs
index 1e9b2fb4a..928d3316f 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -92,19 +92,23 @@ pub struct Worker {
pub name: String,
pub isolate: deno_core::EsIsolate,
pub inspector: Option<Box<DenoInspector>>,
- pub state: State,
+ pub state: Rc<State>,
pub waker: AtomicWaker,
pub(crate) internal_channels: WorkerChannelsInternal,
external_channels: WorkerHandle,
}
impl Worker {
- pub fn new(name: String, startup_data: StartupData, state: State) -> Self {
- let loader = Rc::new(state.clone());
- let mut isolate = deno_core::EsIsolate::new(loader, startup_data, false);
+ pub fn new(
+ name: String,
+ startup_data: StartupData,
+ state: &Rc<State>,
+ ) -> Self {
+ let mut isolate =
+ deno_core::EsIsolate::new(state.clone(), startup_data, false);
{
- let global_state = state.borrow().global_state.clone();
+ let global_state = state.global_state.clone();
let core_state_rc = CoreIsolate::state(&isolate);
let mut core_state = core_state_rc.borrow_mut();
core_state.set_js_error_create_fn(move |core_js_error| {
@@ -113,7 +117,6 @@ impl Worker {
}
let inspector = {
- let state = state.borrow();
let global_state = &state.global_state;
global_state
.flags
@@ -129,7 +132,7 @@ impl Worker {
name,
isolate,
inspector,
- state,
+ state: state.clone(),
waker: AtomicWaker::new(),
internal_channels,
external_channels,
@@ -193,8 +196,7 @@ impl Worker {
fn wait_for_inspector_session(&mut self) {
let should_break_on_first_statement = self.inspector.is_some() && {
- let state = self.state.borrow();
- state.is_main && state.global_state.flags.inspect_brk.is_some()
+ self.state.is_main && self.state.global_state.flags.inspect_brk.is_some()
};
if should_break_on_first_statement {
self
@@ -250,9 +252,8 @@ pub struct MainWorker(Worker);
impl MainWorker {
// TODO(ry) combine MainWorker::new and MainWorker::create.
- fn new(name: String, startup_data: StartupData, state: State) -> Self {
- let state_ = state.clone();
- let mut worker = Worker::new(name, startup_data, state_);
+ fn new(name: String, startup_data: StartupData, state: &Rc<State>) -> Self {
+ let mut worker = Worker::new(name, startup_data, state);
{
let isolate = &mut worker.isolate;
ops::runtime::init(isolate, &state);
@@ -281,11 +282,11 @@ impl MainWorker {
}
pub fn create(
- global_state: GlobalState,
+ global_state: &Arc<GlobalState>,
main_module: ModuleSpecifier,
) -> Result<MainWorker, ErrBox> {
let state = State::new(
- global_state.clone(),
+ &global_state,
None,
main_module,
global_state.maybe_import_map.clone(),
@@ -294,7 +295,7 @@ impl MainWorker {
let mut worker = MainWorker::new(
"main".to_string(),
startup_data::deno_isolate_init(),
- state,
+ &state,
);
{
let (stdin, stdout, stderr) = get_stdio();
@@ -335,7 +336,6 @@ mod tests {
use crate::flags;
use crate::global_state::GlobalState;
use crate::startup_data;
- use crate::state::State;
use crate::tokio_util;
use std::sync::atomic::Ordering;
@@ -349,12 +349,11 @@ mod tests {
ModuleSpecifier::resolve_url_or_path(&p.to_string_lossy()).unwrap();
let global_state = GlobalState::new(flags::Flags::default()).unwrap();
let state =
- State::new(global_state, None, module_specifier.clone(), None, false)
+ State::new(&global_state, None, module_specifier.clone(), None, false)
.unwrap();
- let state_ = state.clone();
- tokio_util::run_basic(async move {
+ tokio_util::run_basic(async {
let mut worker =
- MainWorker::new("TEST".to_string(), StartupData::None, state);
+ MainWorker::new("TEST".to_string(), StartupData::None, &state);
let result = worker.execute_module(&module_specifier).await;
if let Err(err) = result {
eprintln!("execute_mod err {:?}", err);
@@ -363,8 +362,7 @@ mod tests {
panic!("Future got unexpected error: {:?}", e);
}
});
- let state = state_.borrow();
- assert_eq!(state.metrics.resolve_count, 2);
+ assert_eq!(state.metrics.borrow().resolve_count, 2);
// Check that we didn't start the compiler.
assert_eq!(state.global_state.compiler_starts.load(Ordering::SeqCst), 0);
}
@@ -379,12 +377,11 @@ mod tests {
ModuleSpecifier::resolve_url_or_path(&p.to_string_lossy()).unwrap();
let global_state = GlobalState::new(flags::Flags::default()).unwrap();
let state =
- State::new(global_state, None, module_specifier.clone(), None, false)
+ State::new(&global_state, None, module_specifier.clone(), None, false)
.unwrap();
- let state_ = state.clone();
- tokio_util::run_basic(async move {
+ tokio_util::run_basic(async {
let mut worker =
- MainWorker::new("TEST".to_string(), StartupData::None, state);
+ MainWorker::new("TEST".to_string(), StartupData::None, &state);
let result = worker.execute_module(&module_specifier).await;
if let Err(err) = result {
eprintln!("execute_mod err {:?}", err);
@@ -394,7 +391,6 @@ mod tests {
}
});
- let state = state_.borrow();
// Check that we didn't start the compiler.
assert_eq!(state.global_state.compiler_starts.load(Ordering::SeqCst), 0);
}
@@ -416,18 +412,13 @@ mod tests {
..flags::Flags::default()
};
let global_state = GlobalState::new(flags).unwrap();
- let state = State::new(
- global_state.clone(),
- None,
- module_specifier.clone(),
- None,
- false,
- )
- .unwrap();
+ let state =
+ State::new(&global_state, None, module_specifier.clone(), None, false)
+ .unwrap();
let mut worker = MainWorker::new(
"TEST".to_string(),
startup_data::deno_isolate_init(),
- state.clone(),
+ &state,
);
worker.execute("bootstrap.mainRuntime()").unwrap();
let result = worker.execute_module(&module_specifier).await;
@@ -437,8 +428,7 @@ mod tests {
if let Err(e) = (&mut *worker).await {
panic!("Future got unexpected error: {:?}", e);
}
- let state = state.borrow();
- assert_eq!(state.metrics.resolve_count, 3);
+ assert_eq!(state.metrics.borrow().resolve_count, 3);
// Check that we've only invoked the compiler once.
assert_eq!(state.global_state.compiler_starts.load(Ordering::SeqCst), 1);
}
@@ -448,7 +438,7 @@ mod tests {
let mut worker = MainWorker::new(
"TEST".to_string(),
startup_data::deno_isolate_init(),
- state,
+ &state,
);
worker.execute("bootstrap.mainRuntime()").unwrap();
worker