[LON-CAPA-dev] Math::Complex won't be in 2.1
Jeremy Bowers
lon-capa-dev@mail.lon-capa.org
Thu, 08 Dec 2005 11:55:50 -0500
Guy Albertelli II wrote:
> Hi All,
>
> So I won't be able to include Math::Complex in 2.1.
>
> Unless someone has some great idea on how to fix that this script is
> up to 1 gig of consumed memory after 2000 iterations, and out of
> memory on my machine after 4800 iterations.
I replicated your results on my machine, and this stops the leak on my
machine:
use Safe;
use Symbol;
use Devel::Symdump;
my $i=0;
while (1)
{
my $safe = new Safe;
$safe->deny_only(':dangerous');
$safe->reval('use Math::Complex;');
$i++;
if ( $i%10 == 0 ) { print("$i\n"); }
delete_package_recurse($safe->{Root});
}
sub delete_package_recurse
{
my $package = shift;
my $Syms = Devel::Symdump->new($package);
for my $subpackage (keys
%{$Syms->{RESULT}->{$package}->{PACKAGES}})
{
delete_package_recurse($subpackage);
}
# print "Deleting $package\n";
Symbol::delete_package($package);
}
But it's significantly slower; about 50%, even before you load other
things into the Safe.
You may not need full recursion in the package deletion, but I tried
just deleting $safe->{Root}.'Math::Complex', .'Math', and the safe
space, but that still seemed to leak. I couldn't find a constant set of
packages I could delete.