Revert "8c34e50dc slowed down detruction with no DESTROY"
authorFather Chrysostomos <sprout@cpan.org>
Tue, 20 Nov 2012 03:59:49 +0000 (19:59 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 20 Nov 2012 05:31:56 +0000 (21:31 -0800)
This reverts commit 7cc6787e9dbebdd83799d997361188ab6dfe8ead.

That commit is causing crashes on Windows for some as yet unknown rea-
son.  (See ticket #115830.)  I don’t have time to fix it before the
release of 5.17.6.

mro.c
sv.c

diff --git a/mro.c b/mro.c
index be2038f..2d1d887 100644 (file)
--- a/mro.c
+++ b/mro.c
@@ -578,7 +578,6 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash)
                 revmeta->cache_gen++;
             if(revmeta->mro_nextmethod)
                 hv_clear(revmeta->mro_nextmethod);
-           if (!SvOBJECT(revstash)) SvSTASH(revstash) = NULL;
 
            (void)
              hv_store(
@@ -1357,7 +1356,6 @@ Perl_mro_method_changed_in(pTHX_ HV *stash)
             mrometa->cache_gen++;
             if(mrometa->mro_nextmethod)
                 hv_clear(mrometa->mro_nextmethod);
-            if (!SvOBJECT(revstash)) SvSTASH(revstash) = NULL;
         }
     }
 
diff --git a/sv.c b/sv.c
index e31301d..b034f4e 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -6338,12 +6338,12 @@ S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
            if (!destructor) {
                GV * const gv =
                    gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
-               if (gv) destructor = GvCV(gv);
-               if (!SvOBJECT(stash))
-                   SvSTASH(stash) =
-                       destructor ? (HV *)destructor : ((HV *)0)+1;
+               if (gv && (destructor = GvCV(gv))) {
+                   if (!SvOBJECT(stash))
+                       SvSTASH(stash) = (HV *)destructor;
+               }
            }
-           if (destructor && destructor != ((CV *)0)+1
+           if (destructor
                /* A constant subroutine can have no side effects, so
                   don't bother calling it.  */
                && !CvCONST(destructor)
@@ -12000,7 +12000,7 @@ S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
                    SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
                } else if (SvMAGIC(dstr))
                    SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
-               if (SvOBJECT(dstr) && SvSTASH(dstr))
+               if (SvSTASH(dstr))
                    SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
            }