[RFC] Making talloc_reference() safer.

Volker Lendecke Volker.Lendecke at SerNet.DE
Tue Oct 25 03:57:46 MDT 2011


On Mon, Oct 24, 2011 at 04:46:27PM -0700, Jeremy Allison wrote:
> On Mon, Oct 24, 2011 at 05:50:38PM +1100, ronnie sahlberg wrote:
> > 
> > Even better I think would be if you had a new set of creator functions
> >  where you could set the "no longer hierarical, now its multi-parent
> > referenced" already from the initial creation. That would be even
> > better imho  to force the choice of api at object creation time and
> > not create it as ahierarical object and then later "upgrade" it to a
> > different model.
> > 
> > 
> > I.e. offer something like this
> > talloc_new_ref(...)
> > instead of using the pattern
> > talloc_new(...)
> > ...
> > talloc_make_reference_ptr(...)
> 
> Yes, this makes much more sense to me too.

On further thought, I might be okay with calls like

talloc_set_referencable()
talloc_unset_referencable()
talloc_is_referencable()

talloc_reference() would return NULL for a non-referencable
object, gensec could return EINVAL by first checking via
talloc_is_referencable(). talloc_free() on a referencable
object would just abort. Abort to me is preferable over just
leaking because this makes sure we don't leak by accident.

I still don't like talloc_reference() at all and I would
much rather live without it, but with the set of calls it
can become a very obvious part of an API. It complicates it,
but if API developers see it as necessary, so be it. We can
always work on alternatives.

Why no talloc_new_referencable() as I first thought? This
would trickle up all credential_init() style calls and
unnecessarily clutter those APIs for non-referencing use.

With best regards,

Volker Lendecke

-- 
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen


More information about the samba-technical mailing list