summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/ci.yml6
-rw-r--r--cli/tests/integration/run_tests.rs8
-rw-r--r--cli/tests/testdata/event_listener_error_immediate_exit_worker.ts4
-rw-r--r--cli/tests/testdata/event_listener_error_immediate_exit_worker.ts.out8
-rw-r--r--runtime/web_worker.rs4
-rw-r--r--runtime/worker.rs1
6 files changed, 28 insertions, 3 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 49e4bcf01..6bea68577 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -236,7 +236,7 @@ jobs:
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
- key: 11-cargo-home-${{ matrix.os }}-${{ hashFiles('Cargo.lock') }}
+ key: 12-cargo-home-${{ matrix.os }}-${{ hashFiles('Cargo.lock') }}
# In main branch, always creates fresh cache
- name: Cache build output (main)
@@ -252,7 +252,7 @@ jobs:
!./target/*/*.zip
!./target/*/*.tar.gz
key: |
- 11-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ github.sha }}
+ 12-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ github.sha }}
# Restore cache from the latest 'main' branch build.
- name: Cache build output (PR)
@@ -268,7 +268,7 @@ jobs:
!./target/*/*.tar.gz
key: never_saved
restore-keys: |
- 11-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-
+ 12-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-
# Don't save cache after building PRs or branches other than 'main'.
- name: Skip save cache (PR)
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs
index d2f11499b..1cf22a51a 100644
--- a/cli/tests/integration/run_tests.rs
+++ b/cli/tests/integration/run_tests.rs
@@ -2714,6 +2714,14 @@ itest!(event_listener_error_immediate_exit {
exit_code: 1,
});
+// https://github.com/denoland/deno/pull/14159#issuecomment-1092285446
+itest!(event_listener_error_immediate_exit_worker {
+ args:
+ "run --quiet --unstable -A event_listener_error_immediate_exit_worker.ts",
+ output: "event_listener_error_immediate_exit_worker.ts.out",
+ exit_code: 1,
+});
+
itest!(set_timeout_error {
args: "run --quiet set_timeout_error.ts",
output: "set_timeout_error.ts.out",
diff --git a/cli/tests/testdata/event_listener_error_immediate_exit_worker.ts b/cli/tests/testdata/event_listener_error_immediate_exit_worker.ts
new file mode 100644
index 000000000..87e2ecb19
--- /dev/null
+++ b/cli/tests/testdata/event_listener_error_immediate_exit_worker.ts
@@ -0,0 +1,4 @@
+new Worker(
+ new URL("event_listener_error_immediate_exit.ts", import.meta.url).href,
+ { type: "module", deno: { namespace: true } },
+);
diff --git a/cli/tests/testdata/event_listener_error_immediate_exit_worker.ts.out b/cli/tests/testdata/event_listener_error_immediate_exit_worker.ts.out
new file mode 100644
index 000000000..8bd312298
--- /dev/null
+++ b/cli/tests/testdata/event_listener_error_immediate_exit_worker.ts.out
@@ -0,0 +1,8 @@
+1
+error: Uncaught (in worker "") Error: bar
+ throw new Error("bar");
+ ^
+ at [WILDCARD]/event_listener_error_immediate_exit.ts:4:9
+ at [WILDCARD]/event_listener_error_immediate_exit.ts:11:1
+error: Uncaught (in promise) Error: Unhandled error in child worker.
+ at [WILDCARD]
diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs
index 9f120539c..23281ad68 100644
--- a/runtime/web_worker.rs
+++ b/runtime/web_worker.rs
@@ -557,6 +557,8 @@ impl WebWorker {
let id = self.preload_module(module_specifier, false).await?;
let mut receiver = self.js_runtime.mod_evaluate(id);
tokio::select! {
+ biased;
+
maybe_result = &mut receiver => {
debug!("received module evaluate {:#?}", maybe_result);
maybe_result.expect("Module evaluation result not provided.")
@@ -579,6 +581,8 @@ impl WebWorker {
) -> Result<(), AnyError> {
let mut receiver = self.js_runtime.mod_evaluate(id);
tokio::select! {
+ biased;
+
maybe_result = &mut receiver => {
debug!("received worker module evaluate {:#?}", maybe_result);
// If `None` is returned it means that runtime was destroyed before
diff --git a/runtime/worker.rs b/runtime/worker.rs
index 23fe8e4c0..7165b04f0 100644
--- a/runtime/worker.rs
+++ b/runtime/worker.rs
@@ -304,6 +304,7 @@ impl MainWorker {
) -> T {
loop {
tokio::select! {
+ biased;
result = &mut fut => {
return result;
}