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-----

Reply via email to