On Sat, Mar 13, 2010 at 6:01 PM, Enlightenment SVN
<no-re...@enlightenment.org> wrote:
> Log:
>  Use eina_stringshare_replace to avoid crashes.

And a special note, particularly to Raster that takes some time to get
used to new APIs ;-)

the problem with the old approach is that the reference count can drop
to zero, so you must first inc then dec, to avoid that. See the
following test case:

const char *a = eina_stringshare_add("unique string"); // refcount = 1

// using the old and incorrect way: setting "a" where "a" as used:
eina_stringshare_del(a); // refcount = 0
eina_stringshare_add(a); // refcount = 1, but bogus... since the
content of a was freed already.

// using the correct approach, the same that replace does:
tmp = eina_stringshare_add(a); // refcount = 2
eina_stringshare_del(a); // refcount = 1
a = tmp; // refcount = 1


This is a simplification, using the same variable names it is clearly
stupid, but you have different variables with the same pointer in real
code.


-- 
Gustavo Sverzut Barbieri
http://profusion.mobi embedded systems
--------------------------------------
MSN: barbi...@gmail.com
Skype: gsbarbieri
Mobile: +55 (19) 9225-2202

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to