summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorSatya Rohith <me@satyarohith.com>2024-04-16 19:15:41 +0530
committerGitHub <noreply@github.com>2024-04-16 13:45:41 +0000
commit50223c5c532332f4a296b12b027f85429f529690 (patch)
tree75d4494d1ade596038ad52ac0241addcc3a124c2 /cli
parent0a7f46b8c29d67b579e4ffd4681aa5d0b7e30c6b (diff)
fix(ext/node): dispatch beforeExit/exit events irrespective of listeners (#23382)
Closes https://github.com/denoland/deno/issues/23342 Closes https://github.com/denoland/deno/issues/21757
Diffstat (limited to 'cli')
-rw-r--r--cli/tools/bench/mod.rs2
-rw-r--r--cli/tools/coverage/mod.rs1
-rw-r--r--cli/worker.rs21
3 files changed, 18 insertions, 6 deletions
diff --git a/cli/tools/bench/mod.rs b/cli/tools/bench/mod.rs
index 88bff479c..95986f320 100644
--- a/cli/tools/bench/mod.rs
+++ b/cli/tools/bench/mod.rs
@@ -269,7 +269,9 @@ async fn bench_specifier_inner(
// Ignore `defaultPrevented` of the `beforeunload` event. We don't allow the
// event loop to continue beyond what's needed to await results.
worker.dispatch_beforeunload_event()?;
+ worker.dispatch_process_beforeexit_event()?;
worker.dispatch_unload_event()?;
+ worker.dispatch_process_exit_event()?;
// Ensure the worker has settled so we can catch any remaining unhandled rejections. We don't
// want to wait forever here.
diff --git a/cli/tools/coverage/mod.rs b/cli/tools/coverage/mod.rs
index 67fe979b5..763022c1f 100644
--- a/cli/tools/coverage/mod.rs
+++ b/cli/tools/coverage/mod.rs
@@ -71,6 +71,7 @@ impl crate::worker::CoverageCollector for CoverageCollector {
// Filter out internal JS files from being included in coverage reports
if script_coverage.url.starts_with("ext:")
|| script_coverage.url.starts_with("[ext:")
+ || script_coverage.url.starts_with("node:")
{
continue;
}
diff --git a/cli/worker.rs b/cli/worker.rs
index 74ae1ef8f..070671e60 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -212,12 +212,17 @@ impl CliMainWorker {
.await?;
}
- if !self.worker.dispatch_beforeunload_event()? {
- break;
+ let web_continue = self.worker.dispatch_beforeunload_event()?;
+ if !web_continue {
+ let node_continue = self.worker.dispatch_process_beforeexit_event()?;
+ if !node_continue {
+ break;
+ }
}
}
self.worker.dispatch_unload_event()?;
+ self.worker.dispatch_process_exit_event()?;
if let Some(coverage_collector) = maybe_coverage_collector.as_mut() {
self
@@ -272,10 +277,13 @@ impl CliMainWorker {
Ok(()) => {}
Err(error) => break Err(error),
}
- match self.inner.worker.dispatch_beforeunload_event() {
- Ok(default_prevented) if default_prevented => {} // continue loop
- Ok(_) => break Ok(()),
- Err(error) => break Err(error),
+ let web_continue = self.inner.worker.dispatch_beforeunload_event()?;
+ if !web_continue {
+ let node_continue =
+ self.inner.worker.dispatch_process_beforeexit_event()?;
+ if !node_continue {
+ break Ok(());
+ }
}
};
self.pending_unload = false;
@@ -283,6 +291,7 @@ impl CliMainWorker {
result?;
self.inner.worker.dispatch_unload_event()?;
+ self.inner.worker.dispatch_process_exit_event()?;
Ok(())
}