Steven N. Hirsch <[EMAIL PROTECTED]> writes: >On Mon, 7 Aug 2006, Florian Ragwitz wrote: > >> Hello there, >> >> I wrote bindings for a small C library using XS. In those bindings I map >> some c structures to a perl objects, which are blesed into >> "Audio::XMMSClient". >> >> The new() method allocates a new c structure structure and my bindings >> wrap it into an object. Now I'd like to free the memory allocated in >> new() when the perl object isn't used anymore. >> >> DESTROY seems to be the way to do that. So I defined a DESTROY method in >> my XS code: >> >> void >> DESTROY(c) >> my_c_structure_t* c >> CODE: >> my_c_structure_unref(c); >> >> >> Unfortunately DESTROY won't be called when the perl objects reference >> count reaches zero as it seems to be the case in pure-perl world. What's >> the difference between pure-perl code and XS code with regard to >> DESTROY? How can I get my XS DESTROY method called properly? > >DESTROY is not necessarily called at the time the refcount hits zero.
Yes it is. >Perl cleans up objects without references only when leaving a scope. i.e. that is when it decrements the REFCOUNT (in the FREETMPS/LEAVE). >If >you need more immediate action, just undef them yourself at the point >they're no longer needed. > >Steve