Florian Ragwitz <[EMAIL PROTECTED]> writes: >On Tue, Aug 08, 2006 at 12:37:03PM +0000, Jeremy White wrote: >> There should be no difference between a Perl or XS DESTROY method (in terms >> of when it's called). How are you creating the object? > >I wrote a function which packs the c data structure into a perl object: > >SV* >perl_xmmsclient_new_sv_from_ptr(void* ptr, const char* class) { > SV* obj; > SV* sv; > HV* stash; > > obj = (SV*)newHV();
obj REFCNT = 1 > sv_magic(obj, 0, PERL_MAGIC_ext, (const char*)ptr, 0); > sv = newRV_inc(obj); obj REFCNT = 2 You didn't mean that - you meant newRV_noinc() > stash = gv_stashpv(class, 1); > sv_bless(sv, stash); > > return sv; >} > >Which is invoked in the XS new method: > >void >new(class, clientname) > const char* class > const char* clientname > PREINIT: > xmmsc_connection_t* con = NULL; > PPCODE: > con = xmmsc_init(clientname); > > if (con == NULL) { > ST(0) = &PL_sv_undef; > } else { > ST(0) = perl_xmmsclient_new_sv_from_ptr(con, class); > } > > sv_2mortal(ST(0)); > XSRETURN(1); >-----BEGIN PGP SIGNATURE----- >Version: GnuPG v1.4.1 (GNU/Linux) > >iD8DBQFE2I08dC8qQo5jWl4RAs1pAJ9P8jSYarNjb283zsRSK+u+YPqFZwCfZFR0 >Yc7U1DnqBpf9IHIjQDaNvhs= >=iPWi >-----END PGP SIGNATURE-----