typedef struct CD { Artist *artist; + SV *artist_ref; /* ... */ } CD; @@ -43,7 +44,7 @@ cd->artist = artist; /* WHY DOESN'T THIS SAVE THE ARTIST FROM DESTRUCTION? */ - SvREFCNT_inc(artist->perlobj); + cd->artist_ref = newSVsv(artist_sv); cd_ref = newSV(0); sv_setref_pv(cd_ref, "CD", (void*)cd); @@ -77,7 +78,7 @@ void destroy_cd(SV *cd_sv) { CD *cd = INT2PTR( CD*, SvIV(SvRV(cd_sv)) ); - SvREFCNT_dec(cd->artist->perlobj); + SvREFCNT_dec(cd->artist_ref); Safefree(cd); }