Skip to content

fix(gateway): force launchd plist re-read after refresh#6812

Closed
JonT6 wants to merge 1 commit into
NousResearch:mainfrom
JonT6:fix/launchd-plist-refresh
Closed

fix(gateway): force launchd plist re-read after refresh#6812
JonT6 wants to merge 1 commit into
NousResearch:mainfrom
JonT6:fix/launchd-plist-refresh

Conversation

@JonT6

@JonT6 JonT6 commented Apr 9, 2026

Copy link
Copy Markdown

When hermes gateway start detects a stale launchd plist, it updates the file on disk but launchctl kickstart does NOT re-read it — launchd uses its cached service definition indefinitely, causing restart loops.

Fix: when the plist was refreshed, do bootout + bootstrap + kickstart instead of just kickstart, forcing launchd to drop its cache and pick up the new service definition.

Root cause: refresh_launchd_plist_if_needed() was called but its return value was discarded. Even when the plist file changed, the subsequent kickstart call would restart the gateway with launchd's stale cached definition.

Test: Simulated a Hermes upgrade that changes the binary path, then ran hermes gateway start — gateway now correctly picks up the new path without a restart loop.

When hermes gateway start detects a stale launchd plist, it updates
the file on disk but kickstart does NOT re-read it — launchd uses
its cached service definition indefinitely.

Fix: when plist was refreshed, do bootout + bootstrap + kickstart
instead of just kickstart, forcing launchd to drop its cache and
pick up the new service definition.

This prevents stale plist restart loops where launchd keeps
restarting the gateway with the old binary path/args.
@teknium1

Copy link
Copy Markdown
Contributor

Closing — the bug described isn't present on current main. refresh_launchd_plist_if_needed() already performs bootout+bootstrap internally (lines 1141-1142) when the plist needs updating. The return value being discarded at the call site doesn't cause an issue because the reload is handled inside the function. This PR would add a redundant second bootout+bootstrap cycle. Thanks for looking into this though!

@JonT6

JonT6 commented Apr 10, 2026

Copy link
Copy Markdown
Author

Thanks for the feedback!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants