1#!/usr/bin/perl 2 3use warnings; 4use strict; 5 6use Test::More; 7 8eval { require XS::APItest; XS::APItest->import('sv_count'); 1 } 9 or plan skip_all => "No XS::APItest::sv_count() available"; 10 11plan tests => 1; 12 13sub leak { 14 my ($n, $delta, $code, $name) = @_; 15 my $sv0 = 0; 16 my $sv1 = 0; 17 for my $i (1..$n) { 18 &$code(); 19 $sv1 = sv_count(); 20 $sv0 = $sv1 if $i == 1; 21 } 22 cmp_ok($sv1-$sv0, '<=', ($n-1)*$delta, $name); 23} 24 25# [perl #129788] IO::Poll shouldn't leak on errors 26{ 27 package io_poll_leak; 28 use IO::Poll; 29 30 sub TIESCALAR { bless {} } 31 sub FETCH { die } 32 33 tie(my $a, __PACKAGE__); 34 sub f {eval { IO::Poll::_poll(0, $a, 1) }} 35 36 ::leak(5, 0, \&f, q{IO::Poll::_poll shouldn't leak}); 37} 38