<div class="gmail_quote">On Tue, Feb 8, 2011 at 10:55 PM, Matthew Mondor <span dir="ltr"><<a href="mailto:mm_lists@pulsar-zone.net">mm_lists@pulsar-zone.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div id=":35">- Memory custom-allocated using ecl_alloc() or ecl_alloc_align() in<br>
  C-inline code will automatically get garbage collected if no longer<br>
  referenced<br></div></blockquote><div><br></div><div>True.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div id=":35">
- If a finalizer is wanted at GC collect/destruction time,<br>
  si_set_finalizer() can be called with the cl_object of the foreign<br>
  pointer and the cl_object of a custom finalizer function which will<br>
  be called by the GC before such memory is reclaimed<br></div></blockquote><div><br></div><div>Also true.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div id=":35">
- If wanted, ecl_delloc() may be used to haste destruction of an<br>
  allocated object, and any custom registered finalizer will also<br>
  automatically/implicitely be called<br></div></blockquote></div><br>No. Various things.<div><br></div><div>The first one is that finalizers are not immediately called during garbage collection. That would be insane, because arbitrary lisp code can only be invoked when memory allocation is possible. Instead, a garbage collection may trigger a finalization process which first revives the object, then, possibly in the next GC cycle, finalizes it and finally, being zeroed memory, it gets deallocated.</div>

<div><br></div><div>Second, ecl_dealloc() is just a hint to the garbage collector. Memory may or may not be marked as unused immediately, but even then, finalization will not be called until the GC cycle process I mentioned before happens. In general this is true for all garbage collectors: finalization is associated to GC not to "deallocation", an operation which is too costly if carried on fully.</div>

<div><br></div><div>So if you want deterministic finalization, first finalize the object and _then_ deallocate it.</div><div><br></div><div>Juanjo<br clear="all"><br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br>

<a href="http://juanjose.garciaripoll.googlepages.com" target="_blank">http://juanjose.garciaripoll.googlepages.com</a><br>
</div>