duplicate DESTROY
authorLarry Wall <lwall@scalpel.netlabs.com>
Wed, 11 Jan 1995 19:01:09 +0000 (11:01 -0800)
committerAndy Dougherty <doughera@lafcol.lafayette.edu>
Wed, 11 Jan 1995 19:01:09 +0000 (19:01 +0000)
In order to fix the duplicate DESTROY bug, I need to remove [the
modified] lines from sv_setsv.

Basically, copying an object shouldn't produce another object without an
explicit blessing.  I'm not sure if this will break anything.  If Ilya
and anyone else so inclined would apply this patch and see if it breaks
anything related to overloading (or anything else object-oriented), I'd
be much obliged.

By the way, here's a test script for the duplicate DESTROY.  You'll note
that it prints DESTROYED twice, once for , and once for .  I don't
think an object should be considered an object unless viewed through
a reference.  When accessed directly it should behave as a builtin type.

#!./perl

 = new main;
 = '';

sub new {
    my ;
    local /tmp/ssh-vaEzm16429/agent.16429 = bless $a;
    local  = ;      # Bogusly makes  an object.
    /tmp/ssh-vaEzm16429/agent.16429;
}

sub DESTROY {
    print "DESTROYED\n";
}

Larry

sv.c

diff --git a/sv.c b/sv.c
index 63dfa71..7776aa6 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -1629,10 +1629,6 @@ register SV *sstr;
     else {
        (void)SvOK_off(dstr);
     }
-    if (SvOBJECT(sstr)) {
-       SvOBJECT_on(dstr);
-       SvSTASH(dstr) = (HV*)SvREFCNT_inc(SvSTASH(sstr));
-    }
     SvTAINT(dstr);
 }