diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2022-11-24 21:30:15 +0100 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2022-11-24 21:30:15 +0100 |
| commit | c8b6fef70fd77e412a665ea8a1e45b0122e68544 (patch) | |
| tree | 89fee30f3554287ec044a7dfb0b751770f3ccd39 | |
| parent | 81d26e730eccb3c7b51d5d36b06950bfe84a81f6 (diff) | |
| download | rust-c8b6fef70fd77e412a665ea8a1e45b0122e68544.tar.gz rust-c8b6fef70fd77e412a665ea8a1e45b0122e68544.zip | |
Properly implement Drop for JodGroupChild
| -rw-r--r-- | crates/flycheck/src/lib.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/crates/flycheck/src/lib.rs b/crates/flycheck/src/lib.rs index 8f93dad06e3..f13088cd90e 100644 --- a/crates/flycheck/src/lib.rs +++ b/crates/flycheck/src/lib.rs @@ -360,13 +360,20 @@ impl FlycheckActor { } } -struct JodChild(GroupChild); +struct JodGroupChild(GroupChild); + +impl Drop for JodGroupChild { + fn drop(&mut self) { + _ = self.0.kill(); + _ = self.0.wait(); + } +} /// A handle to a cargo process used for fly-checking. struct CargoHandle { /// The handle to the actual cargo process. As we cannot cancel directly from with /// a read syscall dropping and therefore terminating the process is our best option. - child: JodChild, + child: JodGroupChild, thread: jod_thread::JoinHandle<io::Result<(bool, String)>>, receiver: Receiver<CargoMessage>, } @@ -374,7 +381,7 @@ struct CargoHandle { impl CargoHandle { fn spawn(mut command: Command) -> std::io::Result<CargoHandle> { command.stdout(Stdio::piped()).stderr(Stdio::piped()).stdin(Stdio::null()); - let mut child = command.group_spawn().map(JodChild)?; + let mut child = command.group_spawn().map(JodGroupChild)?; let stdout = child.0.inner().stdout.take().unwrap(); let stderr = child.0.inner().stderr.take().unwrap(); |
