消除 PTY EOF 用例的终态竞态
- process_session_real_pty_eof_reaches_terminal 原先无条件要求 close stdin 成功,PTY 在高负载下先自然 EOF 并退出时会被误判为失败 - 改为仅在会话未终止时要求 close 成功;已进入终态时保留 exited 与 EOF 输出断言,不削弱验证目标
This commit is contained in:
@@ -1399,10 +1399,21 @@ process.stdin.resume();
|
||||
)
|
||||
.expect("poll ready");
|
||||
}
|
||||
let eof = write_process_session_stdin_at(root, &identity, &poll.process_id, "", false, true)
|
||||
.expect("close stdin");
|
||||
assert!(eof.eof);
|
||||
assert!(!eof.stdin_open);
|
||||
// 自然 EOF 与本用例显式 close 存在竞态:PTY 在负载下可能先收到流 EOF,
|
||||
// 子进程随即退出并把会话置为终态,此时 close 会以「已进入终态」拒绝。
|
||||
// 该终态正是用例要验证的收敛结果,因此只在会话仍未终止时要求 close 成功。
|
||||
match write_process_session_stdin_at(root, &identity, &poll.process_id, "", false, true) {
|
||||
Ok(eof) => {
|
||||
assert!(eof.eof);
|
||||
assert!(!eof.stdin_open);
|
||||
}
|
||||
Err(error) => {
|
||||
assert!(
|
||||
error.contains("已进入终态"),
|
||||
"closing stdin failed for a non-terminal session: {error}"
|
||||
);
|
||||
}
|
||||
}
|
||||
let mut tail = String::new();
|
||||
for _ in 0..20 {
|
||||
poll = poll_process_session_at(
|
||||
|
||||
Reference in New Issue
Block a user