On Sat, 13 Mar 2010 18:16:17 -0300 Gustavo Sverzut Barbieri
<barbi...@profusion.mobi> said:

> 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.

whatever code did this was at fault as a stgringshare del is the equivalent of
a free - and so you're using freed memory (though in practice it only got freed
on refcount becoming 0).

> // 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

yes - that'd be more correct.

> 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.

actually code that does this probably should just do: if (newstr != oldstr)
{ stringshare_del; stringshare_add; } :) - no need for a replace :)

> -- 
> 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


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
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