[Openmcl-devel] make-record malloc/free question

Cyrus Harmon ch-openmcl at bobobeach.com
Fri Aug 20 01:29:31 PDT 2004

This is what I was looking for. Thanks for the pointer. I'm pretty 
comfortable with the restrictions on the malloc'ed memory object, but 
the "termination" stuff is what I think I need.

As for make-record, I, naively, assumed that when the value returned by 
make-record was gc'ed, it would #_free the memory for me. I can 
understand why this might not be a good idea, but it might make sense 
to do one or more of the following:

1. #_free the malloc'ed memory when the value is gc'ed

2. provide a destroy-record function #_frees the malloc'ed memory

3. Change the make-record documentation to tell users of make-record 
that they need to #_free the memory when they're done with it.

I know it's ugly living in a mixed lisp/non-lisp memory environment, 
but the alternative (not calling foreign code) seems worse.

I'll see if I can make this work for me. I gather this whole 
termination/finalization(which unfortunately means something else in 
MOP terms) is (was?) a recurring issue on the flame war battlegrounds, 
but it's too bad (IMHO) that this isn't part of the language spec, 
rather than an implementation "feature".



On Aug 19, 2004, at 2:26 PM, Gary Byers wrote:
> (defmethod initialize-instance :after ((x encapsulating-object) &rest 
> initargs)
>   (ccl:terminate-when-unreachable x))
> (defmethod ccl:terminate ((x encapsulating-object))
>   (with-slots (foreign-pointer)
>     (when foreign-pointer
>       (#_free foreign-pointer)
>       (setq foreign-pointer nil))))
> The CCL:TERMINATE method will be called on some arbitrary thread
> sometime (hopefully soon) after the GC has decided that there are no
> strong references to an object which has been the argument of a
> If it makes sense to say that the foreign object should live as long
> as there's lisp code that references it (through the encapsulating
> obect) and no longer, this is one way of ensuring that.
> (What OpenMCL calls "termination" is essentially the same as what
> Java and other languages call "finalization".)

More information about the Openmcl-devel mailing list