git.delta.rocks / jrsonnet / refs/commits / f7d72837457a

difftreelog

fix unbiased stdout/process join race condition

koskloloYaroslav Bolyukin2026-02-04parent: #6fa49bc.patch.diff
in: trunk

1 file changed

modifiedcrates/fleet-base/src/command.rsdiffbeforeafterboth
349 let mut out_buf = if want_stdout { Some(vec![]) } else { None };349 let mut out_buf = if want_stdout { Some(vec![]) } else { None };
350 loop {350 loop {
351 select! {351 select! {
352 biased;
353
352 e = err.next() => {354 Some(e) = err.next() => {
353 if let Some(e) = e {
354 let e = e?;355 let e = e?;
355 err_handler.handle_line(&e);356 err_handler.handle_line(&e);
356 }
357 },357 },
358 o = ob.next() => {358 Some(o) = ob.next() => {
359 if let Some(o) = o {
360 out_buf.as_mut().expect("stdout == wants_stdout").extend_from_slice(&o?);359 out_buf.as_mut().expect("stdout == wants_stdout").extend_from_slice(&o?);
361 }
362 },360 },
363 o = ol.next() => {361 Some(o) = ol.next() => {
364 if let Some(o) = o {
365 let o = o?;362 let o = o?;
366 if let Some(out) = out_handler.as_mut() {363 if let Some(out) = out_handler.as_mut() {
367 out.handle_line(&o)364 out.handle_line(&o)
368 } else {365 } else {
369 err_handler.handle_line(&o)366 err_handler.handle_line(&o)
370 }367 }
371 // out_handler.handle_info(&o);368 // out_handler.handle_info(&o);
372 }
373 },369 },
374 code = child.wait() => {370 code = child.wait() => {
375 let code = code?;371 let code = code?;
414 let mut wait_future = pin::pin!(child.wait());410 let mut wait_future = pin::pin!(child.wait());
415 loop {411 loop {
416 select! {412 select! {
413 biased;
414
417 e = err.next() => {415 Some(e) = err.next() => {
418 if let Some(e) = e {
419 let e = e?;416 let e = e?;
420 err_handler.handle_line(&e);417 err_handler.handle_line(&e);
421 }
422 },418 },
423 o = ob.next() => {419 Some(o) = ob.next() => {
424 if let Some(o) = o {
425 out_buf.as_mut().expect("stdout == wants_stdout").extend_from_slice(&o?);420 out_buf.as_mut().expect("stdout == wants_stdout").extend_from_slice(&o?);
426 }
427 },421 },
428 o = ol.next() => {422 Some(o) = ol.next() => {
429 if let Some(o) = o {
430 let o = o?;423 let o = o?;
431 if let Some(out) = out_handler.as_mut() {424 if let Some(out) = out_handler.as_mut() {
432 out.handle_line(&o)425 out.handle_line(&o)
433 } else {426 } else {
434 err_handler.handle_line(&o)427 err_handler.handle_line(&o)
435 }428 }
436 // out_handler.handle_info(&o);429 // out_handler.handle_info(&o);
437 }
438 },430 },
439 code = &mut wait_future => {431 code = &mut wait_future => {
440 let code = code?;432 let code = code?;