@@ -177,27 +177,28 @@ fn run_command_with_output(cmd: &mut Command) -> anyhow::Result<process::Output>
177177 . spawn ( )
178178 . with_context ( || format ! ( "failed to spawn process for cmd: {:?}" , cmd) ) ?;
179179
180- let mut stdout = Vec :: new ( ) ;
181- let mut stderr = Vec :: new ( ) ;
182- let mut stdout_writer = std:: io:: LineWriter :: new ( std:: io:: stdout ( ) ) ;
183- let mut stderr_writer = std:: io:: LineWriter :: new ( std:: io:: stderr ( ) ) ;
184- read2:: read2 (
180+ let mut stdout_writer = std:: io:: LineWriter :: new ( std:: io:: stdout ( ) . lock ( ) ) ;
181+ let mut stderr_writer = std:: io:: LineWriter :: new ( std:: io:: stderr ( ) . lock ( ) ) ;
182+
183+ let mut stdout_written = 0 ;
184+ let mut stderr_written = 0 ;
185+ let ( stdout, stderr) = read2:: read2 (
185186 child. stdout . take ( ) . unwrap ( ) ,
186187 child. stderr . take ( ) . unwrap ( ) ,
187188 & mut |is_stdout, buffer, _is_done| {
188189 // Send output if trace logging is enabled
189190 if log:: log_enabled!( target: "raw_cargo_messages" , log:: Level :: Trace ) {
190191 use std:: io:: Write ;
191192 if is_stdout {
192- stdout_writer. write_all ( & buffer[ stdout . len ( ) ..] ) . unwrap ( ) ;
193+ stdout_writer. write_all ( & buffer[ stdout_written ..] ) . unwrap ( ) ;
193194 } else {
194- stderr_writer. write_all ( & buffer[ stderr . len ( ) ..] ) . unwrap ( ) ;
195+ stderr_writer. write_all ( & buffer[ stderr_written ..] ) . unwrap ( ) ;
195196 }
196197 }
197198 if is_stdout {
198- stdout = buffer. clone ( ) ;
199+ stdout_written = buffer. len ( ) ;
199200 } else {
200- stderr = buffer. clone ( ) ;
201+ stderr_written = buffer. len ( ) ;
201202 }
202203 } ,
203204 ) ?;
0 commit comments