diff --git a/crates/dbg-swc/src/minify/reduce.rs b/crates/dbg-swc/src/minify/reduce.rs index 87739b0ad4bc..6e75d3952a48 100644 --- a/crates/dbg-swc/src/minify/reduce.rs +++ b/crates/dbg-swc/src/minify/reduce.rs @@ -14,7 +14,7 @@ use swc_common::{SourceMap, GLOBALS}; use tempdir::TempDir; use crate::{ - util::{all_js_files, parse_js, print_js}, + util::{all_js_files, parse_js, print_js, ChildGuard}, CREDUCE_INPUT_ENV_VAR, CREDUCE_MODE_ENV_VAR, }; @@ -82,7 +82,8 @@ impl ReduceCommand { let exe = current_exe()?; c.arg(&exe); c.arg(&input); - let status = c.status().context("failed to run creduce")?; + let mut child = ChildGuard(c.spawn().context("failed to run creduce")?); + let status = child.0.wait().context("failed to wait for creduce")?; if status.success() { move_to_data_dir(&input)?; diff --git a/crates/dbg-swc/src/util/mod.rs b/crates/dbg-swc/src/util/mod.rs index 274617cd7807..8acfd2d05a5d 100644 --- a/crates/dbg-swc/src/util/mod.rs +++ b/crates/dbg-swc/src/util/mod.rs @@ -1,7 +1,7 @@ use std::{ io::Write, path::{Path, PathBuf}, - process::{Command, Stdio}, + process::{Child, Command, Stdio}, sync::Arc, }; @@ -130,3 +130,13 @@ pub fn all_js_files(path: &Path) -> Result> { }) .with_context(|| format!("failed to get list of `.js` files in {}", path.display())) } + +pub(crate) struct ChildGuard(pub Child); + +impl Drop for ChildGuard { + fn drop(&mut self) { + if let Err(e) = self.0.kill() { + eprintln!("Could not kill child process: {}", e) + } + } +}