diff options
author | Satya Rohith <me@satyarohith.com> | 2024-04-16 19:15:41 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-16 13:45:41 +0000 |
commit | 50223c5c532332f4a296b12b027f85429f529690 (patch) | |
tree | 75d4494d1ade596038ad52ac0241addcc3a124c2 /cli | |
parent | 0a7f46b8c29d67b579e4ffd4681aa5d0b7e30c6b (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.rs | 2 | ||||
-rw-r--r-- | cli/tools/coverage/mod.rs | 1 | ||||
-rw-r--r-- | cli/worker.rs | 21 |
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(()) } |