From 19b47192f21939b46a8f46d131c31f138aaa3b33 Mon Sep 17 00:00:00 2001 From: NRK Date: Sat, 4 Mar 2023 07:01:19 +0000 Subject: fix: thumbnail leak when removing the last file (#423) bf6c062 tried to fixed the thumbnail leak, but it was done inside a `if (n+1 < filecnt)` branch, meaning the thumbnail was still leaking away whenever the last file was removed. we need to unload the thumb regardless of whether it's in the middle or not. this bug was caught due to the recent `assert`s that were added in 01f3cf2. Closes: https://codeberg.org/nsxiv/nsxiv/issues/422 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/423 Reviewed-by: eylles Reviewed-by: explosion-mental --- main.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/main.c b/main.c index eed945c..9541b6d 100644 --- a/main.c +++ b/main.c @@ -195,13 +195,11 @@ void remove_file(int n, bool manual) if (files[n].path != files[n].name) free((void*) files[n].path); free((void*) files[n].name); + if (tns.thumbs != NULL) + tns_unload(&tns, n); if (n + 1 < filecnt) { if (tns.thumbs != NULL) { - if (tns.thumbs[n].im != NULL) { - imlib_context_set_image(tns.thumbs[n].im); - imlib_free_image_and_decache(); - } memmove(tns.thumbs + n, tns.thumbs + n + 1, (filecnt - n - 1) * sizeof(*tns.thumbs)); memset(tns.thumbs + filecnt - 1, 0, sizeof(*tns.thumbs)); -- cgit v1.2.3-54-g00ecf