In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/bae466e878e8602a507f96eab3bac37f2066b4fb?hp=33ca8d3cbd5926d9f199307cc0f5652557026908>
- Log ----------------------------------------------------------------- commit bae466e878e8602a507f96eab3bac37f2066b4fb Author: David Mitchell <[email protected]> Date: Sun May 17 19:38:44 2015 +0100 Revert "stop T_IN/OUT/INOUT/STDIO typemaps leaking" This reverts commit 50e5165b9638b94be310f15477b42935c79e82d5. That commit fixed the leak too well and instead introduced a potential premature free. This re-introduces the long-standing leak, which will be addressed post 5.22 release. See RT #124181 ----------------------------------------------------------------------- Summary of changes: lib/ExtUtils/typemap | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/lib/ExtUtils/typemap b/lib/ExtUtils/typemap index 831baad..0b09641 100644 --- a/lib/ExtUtils/typemap +++ b/lib/ExtUtils/typemap @@ -388,48 +388,32 @@ T_STDIO { GV *gv = newGVgen("$Package"); PerlIO *fp = PerlIO_importFILE($var,0); - if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) ) { - SV *rv = newRV_noinc((SV*)gv); - rv = sv_bless(rv, gv_stashpv("$Package",1)); - sv_setsv($arg, rv); - SvREFCNT_dec_NN(rv); - } + if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) ) + sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &PL_sv_undef; } T_IN { GV *gv = newGVgen("$Package"); - if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) ) { - SV *rv = newRV_noinc((SV*)gv); - rv = sv_bless(rv, gv_stashpv("$Package",1)); - sv_setsv($arg, rv); - SvREFCNT_dec_NN(rv); - } + if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) ) + sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &PL_sv_undef; } T_INOUT { GV *gv = newGVgen("$Package"); - if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) ) { - SV *rv = newRV_noinc((SV*)gv); - rv = sv_bless(rv, gv_stashpv("$Package",1)); - sv_setsv($arg, rv); - SvREFCNT_dec_NN(rv); - } + if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) ) + sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &PL_sv_undef; } T_OUT { GV *gv = newGVgen("$Package"); - if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) { - SV *rv = newRV_noinc((SV*)gv); - rv = sv_bless(rv, gv_stashpv("$Package",1)); - sv_setsv($arg, rv); - SvREFCNT_dec_NN(rv); - } + if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) + sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &PL_sv_undef; } -- Perl5 Master Repository
