diff options
Diffstat (limited to 'runtime/web_worker.rs')
-rw-r--r-- | runtime/web_worker.rs | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs index 6bb26e555..d246843b4 100644 --- a/runtime/web_worker.rs +++ b/runtime/web_worker.rs @@ -1,7 +1,6 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. use crate::colors; -use crate::inspector::InspectorServer; -use crate::inspector::JsRuntimeInspector; +use crate::inspector_server::InspectorServer; use crate::js; use crate::metrics; use crate::ops; @@ -199,7 +198,6 @@ fn create_handles( /// `WebWorker`. pub struct WebWorker { id: WorkerId, - inspector: Option<Box<JsRuntimeInspector>>, pub js_runtime: JsRuntime, pub name: String, internal_handle: WebWorkerInternalHandle, @@ -320,23 +318,18 @@ impl WebWorker { startup_snapshot: Some(js::deno_isolate_init()), js_error_create_fn: options.js_error_create_fn.clone(), get_error_class_fn: options.get_error_class_fn, + attach_inspector: options.attach_inspector, extensions, ..Default::default() }); - let inspector = if options.attach_inspector { - let mut inspector = JsRuntimeInspector::new(&mut js_runtime); - + if let Some(inspector) = js_runtime.inspector() { if let Some(server) = options.maybe_inspector_server.clone() { let session_sender = inspector.get_session_sender(); let deregister_rx = inspector.add_deregister_handler(); server.register_inspector(session_sender, deregister_rx); } - - Some(inspector) - } else { - None - }; + } let (internal_handle, external_handle) = { let handle = js_runtime.v8_isolate().thread_safe_handle(); @@ -349,7 +342,6 @@ impl WebWorker { Self { id: worker_id, - inspector, js_runtime, name, internal_handle, @@ -424,7 +416,7 @@ impl WebWorker { return result; } - event_loop_result = self.run_event_loop() => { + event_loop_result = self.run_event_loop(false) => { if self.internal_handle.is_terminated() { return Ok(()); } @@ -444,15 +436,14 @@ impl WebWorker { pub fn poll_event_loop( &mut self, cx: &mut Context, + wait_for_inspector: bool, ) -> Poll<Result<(), AnyError>> { // If awakened because we are terminating, just return Ok if self.internal_handle.is_terminated() { return Poll::Ready(Ok(())); } - // We always poll the inspector if it exists. - let _ = self.inspector.as_mut().map(|i| i.poll_unpin(cx)); - match self.js_runtime.poll_event_loop(cx) { + match self.js_runtime.poll_event_loop(cx, wait_for_inspector) { Poll::Ready(r) => { // If js ended because we are terminating, just return Ok if self.internal_handle.is_terminated() { @@ -478,16 +469,11 @@ impl WebWorker { } } - pub async fn run_event_loop(&mut self) -> Result<(), AnyError> { - poll_fn(|cx| self.poll_event_loop(cx)).await - } -} - -impl Drop for WebWorker { - fn drop(&mut self) { - // The Isolate object must outlive the Inspector object, but this is - // currently not enforced by the type system. - self.inspector.take(); + pub async fn run_event_loop( + &mut self, + wait_for_inspector: bool, + ) -> Result<(), AnyError> { + poll_fn(|cx| self.poll_event_loop(cx, wait_for_inspector)).await } } @@ -543,7 +529,7 @@ pub fn run_web_worker( return Ok(()); } - let result = rt.block_on(worker.run_event_loop()); + let result = rt.block_on(worker.run_event_loop(true)); debug!("Worker thread shuts down {}", &name); result } @@ -613,7 +599,7 @@ mod tests { worker.execute(source).unwrap(); let handle = worker.thread_safe_handle(); handle_sender.send(handle).unwrap(); - let r = tokio_util::run_basic(worker.run_event_loop()); + let r = tokio_util::run_basic(worker.run_event_loop(false)); assert!(r.is_ok()) }); @@ -660,7 +646,7 @@ mod tests { worker.execute("onmessage = () => { close(); }").unwrap(); let handle = worker.thread_safe_handle(); handle_sender.send(handle).unwrap(); - let r = tokio_util::run_basic(worker.run_event_loop()); + let r = tokio_util::run_basic(worker.run_event_loop(false)); assert!(r.is_ok()) }); |