talloc null context thread safe ?

simo idra at samba.org
Mon Nov 6 23:55:14 GMT 2006


On Tue, 2006-11-07 at 09:42 +1100, Andrew Bartlett wrote: 
> On Mon, 2006-11-06 at 23:19 +0100, Rémi wrote:
> > Hello,
> > 
> > I am using talloc in a project other than Samba : I hope this is the right 
> > list for my question.
> 
> I think so (that is, I know of no better place to ask).
> 
> > I understand that talloc does not deal with threads, and in fact, it is thread 
> > safe, as long as each thread uses different memory contexts. If two threads 
> > uses the same context then they need to synchronise in order to be safe.
> > Am I correct ?
> 
> Yes.
> 
> > If so, my concern is with the allocation of "top-level" contexts i.e. when 
> > using a NULL parent. When using the "talloc_enable_leak_report", I understand 
> > that the NULL context is in fact a hidden "null context" global variable, so 
> > allocating anything from the NULL context (e.g. tmp_ctx = talloc_new (NULL)) 
> > is no longer thread safe. Am I missing something, or may be this is obvious ?
> > So in multi-thread environement, I should never use a NULL context as a parent 
> > (may be instead define my own per-thread null-context). 
> 
> In short, you should never use the NULL context, particularly in your
> environment.  

Yeah using the NULL context kind of defeats the purpose of the talloc
hierarchy, but the top level context is going to be a NULL one anyway.

I'd say that the best thing is to probably change talloc to save the pid
and create a "null context list" indexed by pid so that you can have a
per-thread top-level context when talloc_enable_leak_report() is in use.

Simo.

-- 
Simo Sorce
Samba Team GPL Compliance Officer
email: idra at samba.org
http://samba.org



More information about the samba-technical mailing list