[redland-dev] implicit free

Maxence Guesdon Maxence.Guesdon at inria.fr
Fri Nov 25 15:47:57 CET 2011


On Fri, 25 Nov 2011 14:37:27 +0000
Norman Gray <norman at astro.gla.ac.uk> wrote:

> 
> Maxence, hello.
> 
> On 25 Nov 2011, at 14:16, Maxence Guesdon wrote:
> 
> >> 
> >> These structs are therefore conceptually 'owned' by the Racket layer, so where the librdf documentation notes that a returned object is shared, I make a copy of it using one of the librdf copy-create functions. 
> > 
> > That is: 
> > - when you retrieve an already existing object (with a foo_get... function for
> >  example), you make a copy and make the gc call the free function on this
> >  copy when the value is no more reachabe,
> 
> I typically wouldn't make a copy in that case, since most of these cases are documented to return a new librdf object.  That's a new object in the sense that it is the caller's (ie my) responsibility to free it when it is no longer needed.
> 
> In some cases, the library documents that the object (or string, or whatever) is a _shared_ object.  In this case, the caller must not free it.  In this case, I explicitly make a copy using, say, librdf_new_uri_from_uri: that returns a 'new' object, which is what I wrap in a scheme object and return.  Now, internally, this librdf 'copy' may be the same as the original, but with an incremented reference count, but that's nothing to do with me.
> 
> > - when you create an object, you don't make a copy, but you just embed it
> >  in a racket value.
> 
> That's correct.  The created object is (implicitly) documented not to be shared, so that it's my responsibility to manage it and free it when necessary.
> 
> > Is so, that's the way I began to before being afraid of freeing objects
> > still in use. I wasn't aware of the counter already used internally.
> 
> You shouldn't need to be aware of the counter used internally.  As long as you don't attempt to call librdf_free_* on an object documented to be shared, but do call librdf_free_* for every object that's not documented to be shared, you should be fine.
>
Thank you, it now seems very clear to me (and kinda simple to implement).

Regards,

Maxence


More information about the redland-dev mailing list