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