Ensure PL_last_in_gv doesn't end up pointing to garbage by NULLing it
Nicholas Clark [Sat, 7 Apr 2007 20:43:14 +0000 (20:43 +0000)]
if the GV it is pointing to gets freed.

p4raw-id: //depot/perl@30868

sv.c

diff --git a/sv.c b/sv.c
index 09dec1f..5d84cb3 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -5144,6 +5144,11 @@ Perl_sv_clear(pTHX_ register SV *sv)
        if (!SvVALID(sv) && GvSTASH(sv))
                sv_del_backref((SV*)GvSTASH(sv), sv);
        }
+       /* FIXME. There are probably more unreferenced pointers to SVs in the
+          interpreter struct that we should check and tidy in a similar
+          fashion to this:  */
+       if ((GV*)sv == PL_last_in_gv)
+           PL_last_in_gv = NULL;
     case SVt_PVMG:
     case SVt_PVNV:
     case SVt_PVIV: