mirror of
https://github.com/Monkopedia/rouse-context.git
synced 2026-10-21 14:19:59 +00:00
* Add failing gate: abandoned bridge sessions hold IO threads (#778) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YYSPuh9bZEJkrzvnEpY1QK * Stop abandoned bridge sessions from pinning IO threads (#778) Each bridged session read the loopback socket with a blocking Socket.InputStream.read on Dispatchers.IO, so every live session held one IO worker. A client that went silent mid-request (no more bytes, no CLOSE) was never timed out by Ktor, so its worker was held forever; 64 of them fill the shared IO pool and every withContext(Dispatchers.IO) in the app queues behind them. The loopback socket is now a Ktor selector-backed socket, so a waiting session parks a coroutine instead of a thread. Sessions are also bounded by inactivity (5 min with no bytes in either direction), which ends the abandoned ones that nothing else would. The removed socket-close catch was a #674 backlog entry; its row goes too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YYSPuh9bZEJkrzvnEpY1QK --------- Co-authored-by: monkopedia-coder <monkopedia-coder@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| lib | ||
| tests | ||
| backfill-relay-secrets.sh | ||
| cancellation-catch-allowlist.tsv | ||
| cancellation-catch-backlog.tsv | ||
| check-apk-distribution.sh | ||
| check-cancellation-catch-order.sh | ||
| check-gate-selftests.sh | ||
| check-no-manual-json.sh | ||
| check-no-production-runblocking.sh | ||
| check-no-sensitive-logging.sh | ||
| check-roborazzi-coverage.sh | ||
| check-roborazzi-step-order.sh | ||
| check-shell-lint.sh | ||
| check-zombie-screens.sh | ||
| production-source-dirs.sh | ||