diff options
Diffstat (limited to 'docs/research/064-release-callback-reentrancy.md')
| -rw-r--r-- | docs/research/064-release-callback-reentrancy.md | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/docs/research/064-release-callback-reentrancy.md b/docs/research/064-release-callback-reentrancy.md new file mode 100644 index 0000000..68ce819 --- /dev/null +++ b/docs/research/064-release-callback-reentrancy.md @@ -0,0 +1,29 @@ +# 064 — 해제 콜백의 영역 재진입 차단 + +실행 코어는 읽기·쓰기 효과 중 같은 영역으로 다시 들어오는 호출을 거절한다. +반면 버퍼의 `release` 콜백은 취소와 티켓 회수 중에도 호출되는데, 그동안 +`running`이 꺼져 있었다. 콜백이 같은 영역의 티켓을 해제하거나 새 작업을 +받아들이면, 바깥쪽 회수 코드가 작업 슬롯과 예산 장부를 계속 수정할 수 있었다. + +[`runtime.c`](../../prototypes/connections/runtime.c)는 자원 해제 콜백 동안 해당 +영역을 실행 중으로 표시하고 이전 상태를 복원한다. 새 상태 필드나 작업별 +할당은 없다. [`test-runtime.c`](../../prototypes/connections/test-runtime.c)는 +취소, 대기 작업 해제, 유효하지 않은 호스트 할당 반환에서 콜백이 같은 티켓을 +해제하거나 새 작업을 접수하려는 시도가 거절되는지 검사한다. + +Linux AArch64의 [기본 코어 검사](../../prototypes/connections/results/2026-09-24-release-callback/core.json)는 +`text` **5,908→5,980 B** (+72 B), data/BSS 0 B, 영역 128 B, 작업 슬롯 224 B를 +기록했다. [선택형 비동기 코어](../../prototypes/connections/results/2026-09-24-release-callback/async-core.json)는 +7,372 B로 자체 8 KiB 상한을 통과했다. [수명 검사](../../prototypes/connections/results/2026-09-24-release-callback/runtime.json), +ASan·UBSan 실행 및 `make check-release`의 실제 문서·HTTP·코드·RSS 검사가 +통과했다. 이 검사는 해제 콜백의 **같은 영역** 재진입을 막는 것이며, +프로세스 내 메모리 격리나 다른 영역으로의 호출 권한을 제공하지 않는다. + +수정한 코드가 담긴 [기본 CLI 묶음](../../prototypes/connections/results/2026-09-24-release-callback/pure-document-micro-linux-aarch64.tar.gz)은 +22,758 B이며 [분리된 위치의 편집·복원 검사](../../prototypes/connections/results/2026-09-24-release-callback/micro-package-check.json)를 +통과했다. [소스 묶음](../../prototypes/connections/results/2026-09-24-release-callback/pure-source-preview.tar.gz)은 +170개 파일, 압축 333,037 B다. [깨끗한 추출·빌드 검사](../../prototypes/connections/results/2026-09-24-release-callback/source-package-check.json)는 +PTY·문서 RSS·프로세스 내 전달·저장 형식 내보내기·Linux 릴리스 상한을 다시 +실행했다. 이 소스 배포 크기는 런타임의 상주 메모리 수치가 아니다. +독립적으로 다시 생성한 소스 묶음도 SHA-256 +`cff657597c0cc33bd9185c8460e0d84f0843da20a786578324ac612fa255c2b4`로 일치했다. |
