forked from enlightenment/efl
evas/cserve2: Prevent potential infinite loop (shutdown)
In shutdown, I've encountered an infinite loop. It SHOULD NOT possibly happen, but somehow some image was marked as delete_me=1 but still present in the LRU.
This commit is contained in:
parent
2b8e74e623
commit
498418bb67
|
@ -523,26 +523,19 @@ evas_cache2_shutdown(Evas_Cache2 *cache)
|
||||||
{
|
{
|
||||||
Eina_List *delete_list;
|
Eina_List *delete_list;
|
||||||
Image_Entry *im;
|
Image_Entry *im;
|
||||||
|
Eina_Inlist *il;
|
||||||
|
|
||||||
|
EINA_INLIST_FOREACH_SAFE(cache->lru, il, im)
|
||||||
|
_evas_cache2_image_entry_delete(cache, im);
|
||||||
|
|
||||||
while (cache->lru)
|
|
||||||
{
|
|
||||||
im = (Image_Entry *)cache->lru;
|
|
||||||
_evas_cache2_image_entry_delete(cache, im);
|
|
||||||
}
|
|
||||||
/* This is mad, I am about to destroy image still alive, but we need to prevent leak. */
|
/* This is mad, I am about to destroy image still alive, but we need to prevent leak. */
|
||||||
while (cache->dirty)
|
EINA_INLIST_FOREACH_SAFE(cache->dirty, il, im)
|
||||||
{
|
_evas_cache2_image_entry_delete(cache, im);
|
||||||
im = (Image_Entry *)cache->dirty;
|
|
||||||
_evas_cache2_image_entry_delete(cache, im);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete_list = NULL;
|
delete_list = NULL;
|
||||||
eina_hash_foreach(cache->activ, _evas_cache2_image_free_cb, &delete_list);
|
eina_hash_foreach(cache->activ, _evas_cache2_image_free_cb, &delete_list);
|
||||||
while (delete_list)
|
EINA_LIST_FREE(delete_list, im)
|
||||||
{
|
_evas_cache2_image_entry_delete(cache, im);
|
||||||
_evas_cache2_image_entry_delete(cache, eina_list_data_get(delete_list));
|
|
||||||
delete_list = eina_list_remove_list(delete_list, delete_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
eina_hash_free(cache->activ);
|
eina_hash_free(cache->activ);
|
||||||
eina_hash_free(cache->inactiv);
|
eina_hash_free(cache->inactiv);
|
||||||
|
|
Loading…
Reference in New Issue