Skip to content

Commit bae466e

Browse files
committed
Revert "stop T_IN/OUT/INOUT/STDIO typemaps leaking"
This reverts commit 50e5165. 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
1 parent 33ca8d3 commit bae466e

File tree

1 file changed

+8
-24
lines changed

1 file changed

+8
-24
lines changed

lib/ExtUtils/typemap

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -388,48 +388,32 @@ T_STDIO
388388
{
389389
GV *gv = newGVgen("$Package");
390390
PerlIO *fp = PerlIO_importFILE($var,0);
391-
if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) ) {
392-
SV *rv = newRV_noinc((SV*)gv);
393-
rv = sv_bless(rv, gv_stashpv("$Package",1));
394-
sv_setsv($arg, rv);
395-
SvREFCNT_dec_NN(rv);
396-
}
391+
if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) )
392+
sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
397393
else
398394
$arg = &PL_sv_undef;
399395
}
400396
T_IN
401397
{
402398
GV *gv = newGVgen("$Package");
403-
if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) ) {
404-
SV *rv = newRV_noinc((SV*)gv);
405-
rv = sv_bless(rv, gv_stashpv("$Package",1));
406-
sv_setsv($arg, rv);
407-
SvREFCNT_dec_NN(rv);
408-
}
399+
if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
400+
sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
409401
else
410402
$arg = &PL_sv_undef;
411403
}
412404
T_INOUT
413405
{
414406
GV *gv = newGVgen("$Package");
415-
if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) ) {
416-
SV *rv = newRV_noinc((SV*)gv);
417-
rv = sv_bless(rv, gv_stashpv("$Package",1));
418-
sv_setsv($arg, rv);
419-
SvREFCNT_dec_NN(rv);
420-
}
407+
if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
408+
sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
421409
else
422410
$arg = &PL_sv_undef;
423411
}
424412
T_OUT
425413
{
426414
GV *gv = newGVgen("$Package");
427-
if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) {
428-
SV *rv = newRV_noinc((SV*)gv);
429-
rv = sv_bless(rv, gv_stashpv("$Package",1));
430-
sv_setsv($arg, rv);
431-
SvREFCNT_dec_NN(rv);
432-
}
415+
if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
416+
sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
433417
else
434418
$arg = &PL_sv_undef;
435419
}

0 commit comments

Comments
 (0)