about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLaurențiu Nicola <lnicola@dend.ro>2021-02-01 21:24:09 +0200
committerLaurențiu Nicola <lnicola@dend.ro>2021-02-01 21:24:09 +0200
commit7ed80bae920bf1851ef07ea5742fb16225353d7f (patch)
tree06795400e093c04f1b4c02c27403ad85b00f590d
parentc0d3e315e33e8d95d064bfe2c276858dd802fd0d (diff)
downloadrust-7ed80bae920bf1851ef07ea5742fb16225353d7f.tar.gz
rust-7ed80bae920bf1851ef07ea5742fb16225353d7f.zip
Reap proc macro server instances
-rw-r--r--Cargo.lock1
-rw-r--r--crates/proc_macro_api/Cargo.toml1
-rw-r--r--crates/proc_macro_api/src/process.rs11
3 files changed, 5 insertions, 8 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 7f89fc580b0..29ecae98b3b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1158,6 +1158,7 @@ dependencies = [
  "log",
  "serde",
  "serde_json",
+ "stdx",
  "tt",
 ]
 
diff --git a/crates/proc_macro_api/Cargo.toml b/crates/proc_macro_api/Cargo.toml
index 078568cb2e2..f0972622303 100644
--- a/crates/proc_macro_api/Cargo.toml
+++ b/crates/proc_macro_api/Cargo.toml
@@ -18,3 +18,4 @@ jod-thread = "0.1.1"
 
 tt = { path = "../tt", version = "0.0.0" }
 base_db = { path = "../base_db", version = "0.0.0" }
+stdx = { path = "../stdx", version = "0.0.0" }
diff --git a/crates/proc_macro_api/src/process.rs b/crates/proc_macro_api/src/process.rs
index 6d6ab888868..3ce851fe82c 100644
--- a/crates/proc_macro_api/src/process.rs
+++ b/crates/proc_macro_api/src/process.rs
@@ -10,6 +10,7 @@ use std::{
 };
 
 use crossbeam_channel::{bounded, Receiver, Sender};
+use stdx::JodChild;
 
 use crate::{
     msg::{ErrorCode, Message, Request, Response, ResponseError},
@@ -116,13 +117,7 @@ struct Task {
 }
 
 struct Process {
-    child: Child,
-}
-
-impl Drop for Process {
-    fn drop(&mut self) {
-        let _ = self.child.kill();
-    }
+    child: JodChild,
 }
 
 impl Process {
@@ -131,7 +126,7 @@ impl Process {
         args: impl IntoIterator<Item = impl AsRef<OsStr>>,
     ) -> io::Result<Process> {
         let args: Vec<OsString> = args.into_iter().map(|s| s.as_ref().into()).collect();
-        let child = mk_child(&path, &args)?;
+        let child = JodChild(mk_child(&path, &args)?);
         Ok(Process { child })
     }