Skip to content

Commit 92b2c4b

Browse files
committed
fix(core): stop cleanup timer before re-setup to prevent timer leak
Call cleanup.stop() unconditionally before checking auto_close config in events.setup(), so re-setup with auto_close disabled properly clears the previous timer.
1 parent 16d7eff commit 92b2c4b

2 files changed

Lines changed: 31 additions & 1 deletion

File tree

lua/peekstack/core/events.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,9 @@ function M.setup()
149149
end,
150150
})
151151

152+
local cleanup = require("peekstack.core.cleanup")
153+
cleanup.stop()
152154
if cfg.ui.popup.auto_close and cfg.ui.popup.auto_close.enabled then
153-
local cleanup = require("peekstack.core.cleanup")
154155
cleanup.start()
155156
end
156157
end

tests/events_spec.lua

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,35 @@ describe("peekstack.core.events", function()
8080
assert.equals(1, #after)
8181
end)
8282

83+
it("stops cleanup timer when re-setup disables auto_close", function()
84+
local timer_store = require("peekstack.util.timer").get_store()
85+
86+
config.setup({
87+
ui = {
88+
quick_peek = { close_events = {} },
89+
popup = {
90+
auto_close = {
91+
enabled = true,
92+
idle_ms = 300000,
93+
check_interval_ms = 60000,
94+
ignore_pinned = true,
95+
},
96+
},
97+
},
98+
})
99+
events.setup()
100+
assert.is_not_nil(timer_store.cleanup)
101+
102+
config.setup({
103+
ui = {
104+
quick_peek = { close_events = {} },
105+
popup = { auto_close = { enabled = false } },
106+
},
107+
})
108+
events.setup()
109+
assert.is_nil(timer_store.cleanup)
110+
end)
111+
83112
it("falls back to default close_events when quick_peek.close_events is invalid", function()
84113
config.setup({
85114
ui = {

0 commit comments

Comments
 (0)