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 <eylles@noreply.codeberg.org>
Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
This commit is contained in:
NRK 2023-03-04 07:01:19 +00:00
parent 8f0322c2e3
commit 19b47192f2

6
main.c
View File

@ -195,13 +195,11 @@ void remove_file(int n, bool manual)
if (files[n].path != files[n].name) if (files[n].path != files[n].name)
free((void*) files[n].path); free((void*) files[n].path);
free((void*) files[n].name); free((void*) files[n].name);
if (tns.thumbs != NULL)
tns_unload(&tns, n);
if (n + 1 < filecnt) { if (n + 1 < filecnt) {
if (tns.thumbs != NULL) { 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) * memmove(tns.thumbs + n, tns.thumbs + n + 1, (filecnt - n - 1) *
sizeof(*tns.thumbs)); sizeof(*tns.thumbs));
memset(tns.thumbs + filecnt - 1, 0, sizeof(*tns.thumbs)); memset(tns.thumbs + filecnt - 1, 0, sizeof(*tns.thumbs));