3.7 KiB
3.7 KiB
Peer Review (Round 5, 최종): exit→_exit 심볼 정정 (commit f0e2bd2) — multi-agent-mux-ui M2
Scope
604fdecf 리뷰에서 지적한 마지막 1건 — cExit가 lookupFunction<...>('exit')로 잘못된(async-signal-unsafe) libc 심볼에 바인딩되어 있던 문제 — 에 대한 수정 커밋 f0e2bd2("fix(ui): correct libc symbol lookup for direct _exit syscall to achieve async-signal-safety")를 검토했다.
변경 확인
pty_session.dart:111, 문자열 리터럴 한 글자(정확히는 언더스코어 하나) 수정:
- final cExit = libc.lookupFunction<_exit_c, _exit_dart>('exit');
+ final cExit = libc.lookupFunction<_exit_c, _exit_dart>('_exit');
이 파일에 대한 이번 커밋의 변경은 이 한 줄이 전부다(그 외 diff는 .dart_tool 빌드 캐시 바이너리뿐).
실행 검증
- 심볼 재확인:
libc.lookup('_exit').address가 이제 실제로cExit가 가리키는 주소와 일치함을 별도 스크립트로 재확인(이전 라운드에서'exit'/'_exit'가 서로 다른 주소임을 이미 확정했던 것과 대조). - 실제 실패 경로 재현: 존재하지 않는 실행파일(
this-binary-does-not-exist-xyz)로PtySession.start()를 호출해execvp()실패 →cExit(-2)경로를 실제로 타게 만들었다. 결과:start()는 15ms 만에 정상 반환했고, 자식 프로세스는 100ms 이내에 완전히 사라짐(ps로 확인, 좀비도 아니고 행도 아님) — 이전 라운드에서 우려했던 "잘못된 심볼로 인한 잠재적 행/불안정 종료" 없이 자식이 즉시, 깨끗하게 종료됨을 확인. - 회귀 테스트:
mam_pty의pty_runtime_test.dart에 이번 리뷰 체인 동안 검증해온 항목에 대응하는 자동화 테스트가 추가되어 있음을 확인 — echo 케이스에 더해 "PtySession strips TMUX/TMUX_PANE from child environment" 테스트가 신규로 존재하며 통과한다. 이제 이전까지 매 라운드 내가 수작업 스크래치 스크립트로 검증해야 했던 env 격리가 저장소 자체의 회귀 테스트로 편입되었다. - 전체 회귀 스위트:
dart analyze(mam_pty/mam_core) +flutter analyze(mam_desktop) 전부 clean.dart test(mam_pty 2/2, mam_core 3/3) +flutter test(mam_desktop 3/3) 전부 통과. - DoD:
git show f0e2bd2 --stat -- '*.sh'→ 셸 스크립트 변경 없음.grep -rn "runInShell: *true"→ 없음.grep -rn "\.writeAsString\|\.writeAsBytes\|\.delete(\|openWrite("(mam_core/mam_pty) → 없음.
M2 전체 검증 이력 요약 (이번 라운드로 완결)
이 마일스톤은 5라운드에 걸쳐 검토되었고, 매 라운드 실제 실행으로 재현/반증했다:
| 라운드 | 커밋 | 발견 | 상태 |
|---|---|---|---|
1 (c2503ed6) |
b7901bc |
/proc/self/fd/ 즉시 예외, PTY 슬레이브 미연결, env 격리 없음 |
NOT PASS |
2 (1fc02bc2) |
f52f6eb |
위 3건 해결(fork/exec 재작성) — 좀비 누수, fork-unsafe 호출 신규 발견 | NOT PASS |
3 (a3f7449e) |
7781e79 |
fork-unsafe 부분개선 — 이벤트루프 정지(가장 심각), env 격리 죽은 코드 신규 발견 | NOT PASS |
4 (604fdecf) |
7f1a7e5(+a6e4dc9) |
이벤트루프 정지/env 격리/좀비회수 전부 해결 — exit↔_exit 심볼 오류 발견 |
NOT PASS |
| 5 (본 리뷰) | f0e2bd2 |
심볼 오류 정정, 실패 경로 실행 재현으로 정상 종료 확인 | PASS |
계획서 §5.2(구조)/§6.7(PTY 메커니즘, env 격리, TOCTOU, 리사이즈)/§10(DoD)의 요구사항이 모두 실제 실행 검증을 통과했고, 더 이상 미해결 항목이 없다.
[VERDICT: PASS]