summaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/js/11_workers.js10
-rw-r--r--runtime/js/99_main.js5
-rw-r--r--runtime/ops/web_worker.rs24
-rw-r--r--runtime/web_worker.rs16
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
};