mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-25 11:10:18 +00:00
fb0e664a10
#2299 introduced profile_env_for_background_worker() in api/profiles.py and changed _ENV_LOCK from threading.Lock() to threading.RLock(). Both changes were incorrect: 1. RLock masked rather than fixed the underlying deadlock. The QA test_env_lock_is_non_reentrant test exists precisely to enforce non-reentrance — RLock would let a single thread hold _ENV_LOCK across nested critical sections, which hides bugs while still allowing different-thread races. 2. The original context manager held _ENV_LOCK for the ENTIRE 'yield' duration, meaning the lock was held for the full background worker's runtime (title generation, compression, update summary — possibly many seconds). That blocked ALL other sessions on _ENV_LOCK, which the QA test_third_message_completes runtime test caught as a timeout on the third sequential message. Fix: mirror the narrow-lock pattern from _run_agent_streaming: - Acquire _ENV_LOCK only for env mutation (set runtime_env + patch skill modules) - Release immediately, yield to worker (no lock held) - Reacquire in finally to restore env + skill modules Restored _ENV_LOCK back to threading.Lock(). All 20 QA tests now pass, including test_third_message_completes (was timing out, now 35s).