Hi~

I think there is some problem in evas_cache_image_size_set function.

In function , it create new evas_cache_image im2.
But it set original evas_cache_image im's reference to 1 and not set im2's 
reference.

There is problem below scenario.


1. object 1 file set 
    -> it create Image entry 1 and object1->engine_data= image entry 1
    -> image entry 1's rerences =1
2. object 2 file set same path and size with 1   
    -> object1->engine_data= image entry 1
    -> image entry 1's rerences =2
3. object 3 file set same path and size with 1   
    -> object1->engine_data= image entry 1
    -> image entry 1's rerences =3
4. object 3 call evas_object_image_size_set
    ->it calls evas_cache_image_size_set
    ->here it create new image entry 2.
    -> but it change image entry 1's reference to 1
5. If object 2 deleted, image entry 1 also disappeared. (because 
_evas_cache_image_dirty_add(image entry 1) is called and ref is 1.
6. when object 1 is rendered, the image entry of object 1 is already free, so 
it make problem. 


So this patch solve these problem. 

But I have still question. 
Even though application calls evas_object_image_size_set related with object 3, 
it maybe must not evas_cache_image_size_set.
It make cache image 1 (which object 1 and object 2 reference) dirty. 
Thanks. 

Attachment: evas_cache_image_size_set.patch
Description: Binary data

------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to