fix(timer): correctly handle multi-instance teardown

This commit is contained in:
2026-05-06 16:46:26 +02:00
parent 53fbabe33e
commit a0ebd649cb

View File

@@ -328,8 +328,25 @@ function M.teardown()
state.uv_timer:close() state.uv_timer:close()
state.uv_timer = nil state.uv_timer = nil
end end
if not (state.running and state.timer_id) then
cleanup_activity_file() cleanup_activity_file()
if state.running and state.timer_id then return
end
-- Remove our own timestamp from the shared file (only if we were the last
-- writer). After this, other_instance_active() reflects *other* instances only.
cleanup_activity_file()
if other_instance_active() then
-- A different session is still actively using this timer: leave it running.
notify("Another instance is active — timer left running on exit")
else
-- No currently-active other instance. However, there may be a surviving
-- idle instance (e.g. instance A whose watchdog re-armed because this
-- instance was writing activity). Write the "0" sentinel so that instance
-- detects the stop on its next user activity and resumes the timer.
mark_timer_paused()
local ok, err = api.stop_timer(state.token, state.timer_id) local ok, err = api.stop_timer(state.token, state.timer_id)
if ok then if ok then
state.running = false state.running = false