@@ -10,11 +10,12 @@ use std::{
10
10
time:: Duration ,
11
11
} ;
12
12
13
+ use command_group:: { CommandGroup , GroupChild } ;
13
14
use crossbeam_channel:: { never, select, unbounded, Receiver , Sender } ;
14
15
use paths:: AbsPathBuf ;
15
16
use rustc_hash:: FxHashMap ;
16
17
use serde:: Deserialize ;
17
- use stdx:: { process:: streaming_output, JodChild } ;
18
+ use stdx:: process:: streaming_output;
18
19
19
20
pub use cargo_metadata:: diagnostic:: {
20
21
Applicability , Diagnostic , DiagnosticCode , DiagnosticLevel , DiagnosticSpan ,
@@ -359,6 +360,8 @@ impl FlycheckActor {
359
360
}
360
361
}
361
362
363
+ struct JodChild ( GroupChild ) ;
364
+
362
365
/// A handle to a cargo process used for fly-checking.
363
366
struct CargoHandle {
364
367
/// The handle to the actual cargo process. As we cannot cancel directly from with
@@ -371,10 +374,10 @@ struct CargoHandle {
371
374
impl CargoHandle {
372
375
fn spawn ( mut command : Command ) -> std:: io:: Result < CargoHandle > {
373
376
command. stdout ( Stdio :: piped ( ) ) . stderr ( Stdio :: piped ( ) ) . stdin ( Stdio :: null ( ) ) ;
374
- let mut child = JodChild :: spawn ( command) ?;
377
+ let mut child = command. group_spawn ( ) . map ( JodChild ) ?;
375
378
376
- let stdout = child. stdout . take ( ) . unwrap ( ) ;
377
- let stderr = child. stderr . take ( ) . unwrap ( ) ;
379
+ let stdout = child. 0 . inner ( ) . stdout . take ( ) . unwrap ( ) ;
380
+ let stderr = child. 0 . inner ( ) . stderr . take ( ) . unwrap ( ) ;
378
381
379
382
let ( sender, receiver) = unbounded ( ) ;
380
383
let actor = CargoActor :: new ( sender, stdout, stderr) ;
@@ -386,13 +389,13 @@ impl CargoHandle {
386
389
}
387
390
388
391
fn cancel ( mut self ) {
389
- let _ = self . child . kill ( ) ;
390
- let _ = self . child . wait ( ) ;
392
+ let _ = self . child . 0 . kill ( ) ;
393
+ let _ = self . child . 0 . wait ( ) ;
391
394
}
392
395
393
396
fn join ( mut self ) -> io:: Result < ( ) > {
394
- let _ = self . child . kill ( ) ;
395
- let exit_status = self . child . wait ( ) ?;
397
+ let _ = self . child . 0 . kill ( ) ;
398
+ let exit_status = self . child . 0 . wait ( ) ?;
396
399
let ( read_at_least_one_message, error) = self . thread . join ( ) ?;
397
400
if read_at_least_one_message || exit_status. success ( ) {
398
401
Ok ( ( ) )
0 commit comments