Skip to content

Commit 03bcb32

Browse files
committed
Keep ConPTY pipes open through process start
1 parent e64b93a commit 03bcb32

1 file changed

Lines changed: 17 additions & 7 deletions

File tree

src/cli/commands/tui.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -469,11 +469,11 @@ mod windows_conpty {
469469
0,
470470
&mut hpc,
471471
);
472-
let _ = CloseHandle(input_read);
473-
let _ = CloseHandle(output_write);
474472
if hr < 0 {
473+
let _ = CloseHandle(input_read);
475474
let _ = CloseHandle(input_write);
476475
let _ = CloseHandle(output_read);
476+
let _ = CloseHandle(output_write);
477477
return Err(app_error(format!(
478478
"failed to create Windows ConPTY for TUI smoke: HRESULT 0x{:08x}",
479479
hr as u32
@@ -483,7 +483,7 @@ mod windows_conpty {
483483
let mut attr_size: SIZE_T = 0;
484484
let _ = InitializeProcThreadAttributeList(null_mut(), 1, 0, &mut attr_size);
485485
if attr_size == 0 {
486-
close_conpty_resources(hpc, input_write, output_read);
486+
close_conpty_resources(hpc, input_read, input_write, output_read, output_write);
487487
return Err(app_error(
488488
"failed to size Windows ConPTY process attribute list",
489489
));
@@ -493,7 +493,7 @@ mod windows_conpty {
493493
let attr_list = attr_storage.as_mut_ptr().cast::<c_void>();
494494
if InitializeProcThreadAttributeList(attr_list, 1, 0, &mut attr_size) == 0 {
495495
let err = GetLastError();
496-
close_conpty_resources(hpc, input_write, output_read);
496+
close_conpty_resources(hpc, input_read, input_write, output_read, output_write);
497497
return Err(app_error(format!(
498498
"failed to initialize Windows ConPTY process attribute list: {err}"
499499
)));
@@ -511,7 +511,7 @@ mod windows_conpty {
511511
{
512512
let err = GetLastError();
513513
DeleteProcThreadAttributeList(attr_list);
514-
close_conpty_resources(hpc, input_write, output_read);
514+
close_conpty_resources(hpc, input_read, input_write, output_read, output_write);
515515
return Err(app_error(format!(
516516
"failed to attach Windows ConPTY to startup info: {err}"
517517
)));
@@ -538,13 +538,15 @@ mod windows_conpty {
538538
{
539539
let err = GetLastError();
540540
DeleteProcThreadAttributeList(attr_list);
541-
close_conpty_resources(hpc, input_write, output_read);
541+
close_conpty_resources(hpc, input_read, input_write, output_read, output_write);
542542
return Err(app_error(format!(
543543
"failed to start Windows ConPTY TUI smoke child: {err}"
544544
)));
545545
}
546546

547547
DeleteProcThreadAttributeList(attr_list);
548+
let _ = CloseHandle(input_read);
549+
let _ = CloseHandle(output_write);
548550

549551
let output_read_raw = output_read as usize;
550552
let reader = thread::spawn(move || {
@@ -607,9 +609,17 @@ mod windows_conpty {
607609
Ok((read, write))
608610
}
609611

610-
unsafe fn close_conpty_resources(hpc: HPCON, input_write: HANDLE, output_read: HANDLE) {
612+
unsafe fn close_conpty_resources(
613+
hpc: HPCON,
614+
input_read: HANDLE,
615+
input_write: HANDLE,
616+
output_read: HANDLE,
617+
output_write: HANDLE,
618+
) {
619+
let _ = CloseHandle(input_read);
611620
let _ = CloseHandle(input_write);
612621
let _ = CloseHandle(output_read);
622+
let _ = CloseHandle(output_write);
613623
ClosePseudoConsole(hpc);
614624
}
615625

0 commit comments

Comments
 (0)