Graphics: Fix deleted but not freed images without any references being incorrectly freed on a subsequent delete command

This commit is contained in:
Kovid Goyal
2024-12-18 09:25:06 +05:30
parent 9f3f5984b4
commit 8facaf4fa0
4 changed files with 34 additions and 11 deletions

View File

@@ -1055,6 +1055,11 @@ class TestGraphics(BaseTest):
delete()
self.ae(s.grman.image_count, 1)
self.ae(len(layers(s)), 0)
delete('A')
self.ae(s.grman.image_count, 1)
s.reset()
self.ae(s.grman.image_count, 0)
put_image(s, cw, ch)
self.ae(s.grman.image_count, 1)
delete('A')
self.ae(s.grman.image_count, 0)
@@ -1104,6 +1109,18 @@ class TestGraphics(BaseTest):
self.ae(s.grman.image_count, 0)
self.assertEqual(s.grman.disk_cache.total_size, 0)
# test delete but not free
s.reset()
iid = 9999999
self.ae(put_image(s, cw, ch, id=iid), (iid, 'OK'))
self.ae(put_ref(s, id=iid), (iid, ('OK', f'i={iid}')))
self.ae(put_image(s, cw, ch, id=iid+1), (iid+1, 'OK'))
self.ae(put_ref(s, id=iid+1), (iid+1, ('OK', f'i={iid+1}')))
delete('i', i=iid)
self.ae(s.grman.image_count, 2)
delete('I', i=iid+1)
self.ae(s.grman.image_count, 1)
def test_animation_frame_loading(self):
s = self.create_screen()
g = s.grman
@@ -1210,6 +1227,7 @@ class TestGraphics(BaseTest):
self.assertIsNone(li(a='d', d='f', i=1))
img = g.image_for_client_id(1)
self.assertEqual(img['data'], b'5' * 36)
self.ae(g.image_count, 1)
self.assertIsNone(li(a='d', d='F', i=1))
self.ae(g.image_count, 0)
self.assertEqual(g.disk_cache.total_size, 0)