From 1d74d7f73aa7cae7933afbb2b35e86e22b8d318c Mon Sep 17 00:00:00 2001 From: alt-glitch Date: Mon, 18 May 2026 17:29:51 +0000 Subject: [PATCH] fix(cron): use delta-based env restore instead of clear+update Avoids a brief window where other threads see an empty os.environ during profile job teardown. Idea from PR #19958. --- cron/scheduler.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cron/scheduler.py b/cron/scheduler.py index 1e28711b16c..7132213eaa0 100644 --- a/cron/scheduler.py +++ b/cron/scheduler.py @@ -192,8 +192,14 @@ def _job_profile_context(job_id: str, profile: Optional[str]): _hermes_home = prior_override if override_token is not None: reset_hermes_home_override(override_token) - os.environ.clear() - os.environ.update(env_snapshot) + # Delta-based restore: remove added keys, restore changed keys. + # Avoids a brief window where other threads see an empty env. + added = set(os.environ.keys()) - set(env_snapshot.keys()) + for k in added: + os.environ.pop(k, None) + for k, v in env_snapshot.items(): + if os.environ.get(k) != v: + os.environ[k] = v def _resolve_origin(job: dict) -> Optional[dict]: