
strace 추적으로 8μs 차이의 동시성 버그 찾기
두줄요약
strace로 파일 시스템콜을 추적해 8μs 간격의 디렉터리 생성 경합을 확인했습니다. C++ 반환값 처리 결함을 찾아 출력 디렉터리 선생성으로 우회했습니다.
문제 상황
- shaka-packager의 다중 입력 병렬 처리에서 출력 파일 생성이 간헐적으로 실패
- 재시도 시 성공하거나 입력 파일이 하나일 때는 정상 동작하는 비결정적 현상
원인 분석
- strace의 스레드별 마이크로초 타임스탬프로 두 스레드의 출력 디렉터리 생성 경합 확인
- 8μs 차이로 한 스레드는 mkdirat 성공, 다른 스레드는 EEXIST 반환 후 openat 이전 종료
std::filesystem::create_directories의 false 반환을error_code확인 없이 실패로 처리한 코드 결함
해결 방법
create_directories반환값과error_code를 함께 검사하도록 조건문 수정- 즉시 우회책으로 패키저 실행 전에 출력 디렉터리를 선생성하여 경합 구간 제거
적용해볼 점
- 애플리케이션 로그만으로 원인 파악이 어려운 파일 I/O 오류에 strace 기반 시스템콜 추적 활용
- 존재 확인 후 생성하는 TOCTOU 흐름에서 정상적인 EEXIST와 실제 오류의 구분 검증



