From 38a2a524a7f2ff41d08a5b76e4f3f1ba0652f7fc Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Wed, 12 Feb 2020 20:33:21 +0100 Subject: [PATCH] Cleanup tag history on screen removal The tag history kept a strong reference to a screen even after that screen was removed. This prevented the garbage collector from cleaning up. Fix this by getting rid of the tag history on screen removal. Related-to: https://github.com/awesomeWM/awesome/issues/2983#issuecomment-584249568 Signed-off-by: Uli Schlachter --- lib/awful/tag.lua | 1 + tests/test-leaks.lua | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/awful/tag.lua b/lib/awful/tag.lua index 8874d69c7..28ef00c03 100644 --- a/lib/awful/tag.lua +++ b/lib/awful/tag.lua @@ -1676,6 +1676,7 @@ capi.screen.connect_signal("removed", function(s) t.data.awful_tag_properties.screen = nil end end + data.history[s] = nil end) function tag.mt:__call(...) diff --git a/tests/test-leaks.lua b/tests/test-leaks.lua index fa185575b..813425fd5 100644 --- a/tests/test-leaks.lua +++ b/tests/test-leaks.lua @@ -81,6 +81,16 @@ collectable(awful.widget.tasklist{screen=1, filter=awful.widget.tasklist.filter. prepare_for_collect = run_delayed_calls collectable(create_wibox()) +-- Test that screens can be collected +local function create_and_remove_screen() + local s = screen.fake_add(-10, -10, 10, 10) + awful.tag.viewnext(s) + s:fake_remove() + return s +end +prepare_for_collect = run_delayed_calls +collectable(create_and_remove_screen()) + runner.run_steps({ function() return true end }) -- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80