summaryrefslogtreecommitdiff
path: root/mg.c
diff options
context:
space:
mode:
authorBrandon Black <blblack@gmail.com>2007-04-30 11:45:54 -0500
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2007-05-03 09:24:47 +0000
commit08aeb9f701fa786d490e79e99ac2f9f9de229da3 (patch)
tree0b85c35a860d553f5c560a72dc51b525224f3036 /mg.c
parent808cb88e26f50aa982b59730bcba3cf312610440 (diff)
downloadperl-08aeb9f701fa786d490e79e99ac2f9f9de229da3.tar.gz
Re: mro status, etc
From: "Brandon Black" <blblack@gmail.com> Message-ID: <84621a60704301445y37e9b05ey235210a8e5547cc1@mail.gmail.com> p4raw-id: //depot/perl@31122
Diffstat (limited to 'mg.c')
-rw-r--r--mg.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/mg.c b/mg.c
index 21f671adc5..9617767165 100644
--- a/mg.c
+++ b/mg.c
@@ -1529,19 +1529,26 @@ int
Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
{
dVAR;
+ HV* stash;
PERL_UNUSED_ARG(sv);
+ /* Bail out if destruction is going on */
+ if(PL_dirty) return 0;
+
/* The first case occurs via setisa,
the second via setisa_elem, which
calls this same magic */
- mro_isa_changed_in(
- GvSTASH(
- SvTYPE(mg->mg_obj) == SVt_PVGV
- ? (GV*)mg->mg_obj
- : (GV*)SvMAGIC(mg->mg_obj)->mg_obj
- )
+ stash = GvSTASH(
+ SvTYPE(mg->mg_obj) == SVt_PVGV
+ ? (GV*)mg->mg_obj
+ : (GV*)SvMAGIC(mg->mg_obj)->mg_obj
);
+ if(PL_delaymagic)
+ PL_delayedisa = stash;
+ else
+ mro_isa_changed_in(stash);
+
return 0;
}