373631bea1
Two-part fix for the dashboard fd exhaustion reported in #81547: 1. Raise RLIMIT_NOFILE soft limit on startup (before uvicorn binds). macOS defaults to 256 for LaunchAgent processes — too tight for the dashboard which opens 3 fds (db+wal+shm) per SessionDB per request across all profiles. After days of polling the soft limit exhausts and every os.listdir/open raises OSError [Errno 24]. The helper raises to the hard limit (or minimum 4096), matching the reporter's ulimit workaround. No-op on Windows (no resource module). 2. Replace bare Path.iterdir() with context-managed os.scandir() in four dashboard hot paths: _fallback_profile_dicts, file manager list, checkpoint listing, and plugin discovery. iterdir() returns a generator that holds an open directory fd until fully consumed; if an exception interrupts iteration the fd leaks. os.scandir() is an explicit context manager that guarantees close on exit, following the same idiom already used in /api/fs/list. Tests: 6 passed, 3 skipped (resource-module tests skip on Windows).
2 lines
11 B
Plaintext
2 lines
11 B
Plaintext
a-espinoza
|