diff options
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/js/11_workers.js | 10 | ||||
-rw-r--r-- | runtime/js/99_main.js | 5 | ||||
-rw-r--r-- | runtime/ops/web_worker.rs | 24 | ||||
-rw-r--r-- | runtime/web_worker.rs | 16 |
4 files changed, 9 insertions, 46 deletions
diff --git a/runtime/js/11_workers.js b/runtime/js/11_workers.js index 2b908b9f8..59ae7371d 100644 --- a/runtime/js/11_workers.js +++ b/runtime/js/11_workers.js @@ -14,7 +14,6 @@ } = window.__bootstrap.primordials; const webidl = window.__bootstrap.webidl; const { URL } = window.__bootstrap.url; - const { Window } = window.__bootstrap.globalInterfaces; const { getLocationHref } = window.__bootstrap.location; const { log, pathFromURL } = window.__bootstrap.util; const { defineEventHandler } = window.__bootstrap.webUtil; @@ -265,14 +264,7 @@ } /* falls through */ case 2: { // Error if (!this.#handleError(data)) { - if (globalThis instanceof Window) { - throw new Error("Unhandled error event reached main worker."); - } else { - core.opSync( - "op_worker_unhandled_error", - data.message, - ); - } + throw new Error("Unhandled error event in child worker."); } break; } diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index 9bbc06971..152430a76 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -157,10 +157,7 @@ delete Object.prototype.__proto__; globalDispatchEvent(errorEvent); if (!errorEvent.defaultPrevented) { - core.opSync( - "op_worker_unhandled_error", - e.message, - ); + throw e; } } } diff --git a/runtime/ops/web_worker.rs b/runtime/ops/web_worker.rs index 8439e4384..14ebb8d6e 100644 --- a/runtime/ops/web_worker.rs +++ b/runtime/ops/web_worker.rs @@ -4,8 +4,6 @@ mod sync_fetch; use crate::web_worker::WebWorkerInternalHandle; use crate::web_worker::WebWorkerType; -use crate::web_worker::WorkerControlEvent; -use deno_core::error::generic_error; use deno_core::error::AnyError; use deno_core::op_async; use deno_core::op_sync; @@ -25,11 +23,6 @@ pub fn init() -> Extension { ("op_worker_recv_message", op_async(op_worker_recv_message)), // Notify host that guest worker closes. ("op_worker_close", op_sync(op_worker_close)), - // Notify host that guest worker has unhandled error. - ( - "op_worker_unhandled_error", - op_sync(op_worker_unhandled_error), - ), ("op_worker_get_type", op_sync(op_worker_get_type)), ("op_worker_sync_fetch", op_sync(op_worker_sync_fetch)), ]) @@ -70,23 +63,6 @@ fn op_worker_close(state: &mut OpState, _: (), _: ()) -> Result<(), AnyError> { Ok(()) } -/// A worker that encounters an uncaught error will pass this error -/// to its parent worker using this op. The parent worker will use -/// this same op to pass the error to its own parent (in case -/// `e.preventDefault()` was not called in `worker.onerror`). This -/// is done until the error reaches the root/ main worker. -fn op_worker_unhandled_error( - state: &mut OpState, - message: String, - _: (), -) -> Result<(), AnyError> { - let sender = state.borrow::<WebWorkerInternalHandle>().clone(); - sender - .post_event(WorkerControlEvent::Error(generic_error(message))) - .expect("Failed to propagate error event to parent worker"); - Ok(()) -} - fn op_worker_get_type( state: &mut OpState, _: (), diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs index 98a8ae076..1ca5deb7a 100644 --- a/runtime/web_worker.rs +++ b/runtime/web_worker.rs @@ -525,15 +525,8 @@ impl WebWorker { return Poll::Ready(Ok(())); } - // In case of an error, pass to parent without terminating worker if let Err(e) = r { - print_worker_error(e.to_string(), &self.name); - let handle = self.internal_handle.clone(); - handle - .post_event(WorkerControlEvent::Error(e)) - .expect("Failed to post message to host"); - - return Poll::Pending; + return Poll::Ready(Err(e)); } panic!( @@ -593,6 +586,12 @@ pub fn run_web_worker( return Ok(()); } + let result = if result.is_ok() { + worker.run_event_loop(true).await + } else { + result + }; + if let Err(e) = result { print_worker_error(e.to_string(), &name); internal_handle @@ -603,7 +602,6 @@ pub fn run_web_worker( return Ok(()); } - let result = worker.run_event_loop(true).await; debug!("Worker thread shuts down {}", &name); result }; |