T143 — 의미어라우터(9793) 핸들상한 크래시 수리
개요
의미어라우터서버.한선(:9793, plist org.crowny.의미어라우터)이 FREADALL 완독 이후 대형 모델(2.8MB, 46074줄 psv) 로드 시 문자열 핸들 상한(480,000) 초과로 exit43 크래시 루프에 빠져 있었다. 로더를 핸들효율 구조로 재작성해 완독 기동시켰다.원인
모델로드()가 각 줄을 포함()+부분()으로 체인 파싱(줄→r1→r2→r3, h1→h2→h3 등
서브스트링의 서브스트링을 반복 생성)하면서 실제 보관에 필요한 문자열 외에
파싱 중간산물 문자열 핸들을 라인당 5~9개씩 추가로 생성. L태그(27458줄)+F태그
(18574줄) 합 46032줄 × 평균 6~7개 중간핸들 ≈ 30만+ 낭비 핸들이 GC 후에도
스코프 내 생존, 480,000 상한을 넘겨 exit43 루프.수리
/Users/ef/crowny-butler/libs/의미어라우터_코어.한선의 모델로드()를
버퍼 오프셋 기반 파싱으로 재작성:
- 줄을 문자열로 뜨지 않고
버퍼바이트읽기()로 파이프(|) 위치를 오프셋 인덱스만으로 스캔 - 각 필드를
버퍼읽기(버퍼, 오프셋, 길이)1회로 직접 추출(체인 부분() 제거) - 태그 판별도 문자열 비교 대신
버퍼바이트읽기()바이트 비교(P=80,C=67,F=70,L=76,
부수 발견: hanseonc_high.c의 STRICT 아리티 테이블에 버퍼읽기가 2인자로
잘못 등록되어(실제 VM BUF_READ는 3인자: buf,offset,length — crownyc.c:10551)
STRICT 컴파일 시 거짓 경고 15건 발생. 테이블을 3인자로 수정(사전부터 존재하던
버그, 원 코드도 3인자로 호출하고 있었음).
검증
CROWNY_STRICT=1 ./hanseonc_high 의미어라우터서버.한선→ 0경고- 격리 기동(
crownyc run직접 실행) → 핸들 경고 없이로드: 7567 cubes1회 출력 - 라이브 교체:
/Users/ef/crowny-butler/libs/의미어라우터서버.toau
.toau.bak-핸들상한전-T143로 백업)
launchctl kickstart -k gui/$(id -u)/org.crowny.의미어라우터→ PID 91492,
[STR]/[VM] 경고 재발 없음
- 9793 라이브 응답 5회 연속 정상 (
완료-보고|완료→보고(결과)|세분|21|...)
관련 파일
/Users/ef/crowny-butler/libs/의미어라우터_코어.한선(모델로드 재작성)/Users/ef/crowny-butler/libs/의미어라우터서버.toau(재컴파일 배포)/Users/ef/crowny-butler/libs/의미어라우터서버.toau.bak-핸들상한전-T143(롤백용 백업)/Users/ef/CrownyOS/crownyc/hanseonc_high.c(버퍼읽기 아리티 3인자 수정)- 로그:
/tmp/라우터서버.err
잔여 이슈
- 방사형이웃.psv 로더(같은 함수 하단)는 여전히
글자()per-char 순회지만
- STRICT 아리티표에 유사한 스테일 항목이 더 있을 수 있음(전수 감사 안 함).