Make sure PerlIO::via doesn't leave its old GV's hanging
Marcus Holland-Moritz [Sat, 8 Nov 2008 18:31:09 +0000 (18:31 +0000)]
in the stash they were created in. Steal the idea from
IO::File to just delete the stash entry after creating
the GV.
This fixes perl #59268.

p4raw-id: //depot/perl@34779

ext/PerlIO/via/via.pm
ext/PerlIO/via/via.xs

index f7ab749..6ff804e 100644 (file)
@@ -1,5 +1,5 @@
 package PerlIO::via;
-our $VERSION = '0.06';
+our $VERSION = '0.07';
 use XSLoader ();
 XSLoader::load 'PerlIO::via';
 1;
index 5e6ddd3..e50052c 100644 (file)
@@ -91,6 +91,10 @@ PerlIOVia_method(pTHX_ PerlIO * f, const char *method, CV ** save, int flags,
                GvIOp(gv) = newIO();
                s->fh = newRV((SV *) gv);
                s->io = GvIOp(gv);
+               if (gv) {
+                   /* shamelessly stolen from IO::File's new_tmpfile() */
+                   hv_delete(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv), G_DISCARD);
+               }
            }
            IoIFP(s->io) = PerlIONext(f);
            IoOFP(s->io) = PerlIONext(f);