In my Perl-RPM package, it's been recently pointed out to me that the object destructors aren't getting called when the object undef'd, but rather at the end of the script (well, the bug report focused on a different problem, but this is the source of it). I've done testing and confirmed this. My guess is that something in the nature of the self-tying object is causing the ref-count to be higher, and I'm not successful in getting it sufficiently down. My TIEHASH method is pure XS, and the new method looks like this: sub new { my $class = shift; my %hash = (); tie %hash, $class, @_; return (tied %hash); } Even though I thought this would work (with %hash going out of scope), I also tried explicitly untie'ing the hash after assigning the value: sub new { my $class = shift; my %hash = (); tie %hash, $class, @_; my $self = tied %hash; untie %hash; return $self; } This didn't do it, either. Plus, if in my script I forego the object ref entirely, the destructor isn't called when "untie" is invoked. The relevant typemap OUTPUT entry for these are: O_RPM_SelfTied if ($var) { $arg = sv_bless(newRV_noinc((SV*)$var), gv_stashpv(\"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\", TRUE)); hv_magic($var, (GV *)Nullhv, 'P'); } else { $arg = newSVsv(&PL_sv_undef); } (This handles both RPM::Database and RPM::Header) Any help is appreciated. When someone untie's a tied hash in my extension, I'd really like it if it happened *then*, rather than at script-end. Randy -- ------------------------------------------------------------------------------- Randy J. Ray | Programming is a Dark Art [...] The programmer is fighting rjray@redhat.com | against the two most destructive forces in the universe: 415-777-9810 x246 | entropy and human stupidity. --Dr. Damian ConwayThread Previous | Thread Next