I downloaded and ran your program and it produced a bunch of warnings. Most of them are probably benign, at leats with respect to your memory problem, but one group caught my eye and tweaked somthing in my memory:
Variable "@perl_widgets" will not stay shared at P:\test\422088.pl lin
+e 3475.
Variable "@checks_antiflats" will not stay shared at P:\test\422088.pl
+ line 4999.
Variable "@antiflats_cmd" will not stay shared at P:\test\422088.pl li
+ne 5005.
Variable "@antiflats_nb" will not stay shared at P:\test\422088.pl lin
+e 5035.
Variable "@antiflats_ms" will not stay shared at P:\test\422088.pl lin
+e 5056.
Variable "@checks_antiflats" will not stay shared at P:\test\422088.pl
+ line 5076.
Variable "$frame_ps_options" will not stay shared at P:\test\422088.pl
+ line 5087.
Variable "$frame_ps_options" will not stay shared at P:\test\422088.pl
+ line 5104.
Variable "$frame_ps_options" will not stay shared at P:\test\422088.pl
+ line 5122.
Variable "$frame_ps_options" will not stay shared at P:\test\422088.pl
+ line 5138.
Variable "$pythag_flag_last_time" will not stay shared at P:\test\4220
+88.pl line 5163.
Variable "$frame_ps_options" will not stay shared at P:\test\422088.pl
+ line 5169.
Variable "$pythag_flag_last_time" will not stay shared at P:\test\4220
+88.pl line 5192.
Variable "$frame_ps_options" will not stay shared at P:\test\422088.pl
+ line 5218.
Variable "$frame_ps_options" will not stay shared at P:\test\422088.pl
+ line 5318.
Variable "@antiflats_nb" will not stay shared at P:\test\422088.pl lin
+e 5324.
Variable "@antiflats_ms" will not stay shared at P:\test\422088.pl lin
+e 5325.
Variable "$frame_ps_options" will not stay shared at P:\test\422088.pl
+ line 5349.
Variable "@antiflats_nb" will not stay shared at P:\test\422088.pl lin
+e 5366.
Variable "@antiflats_ms" will not stay shared at P:\test\422088.pl lin
+e 5370.
Variable "$frame_ps_options" will not stay shared at P:\test\422088.pl
+ line 5422.
Variable "@antiflats_nb" will not stay shared at P:\test\422088.pl lin
+e 5428.
Variable "@antiflats_ms" will not stay shared at P:\test\422088.pl lin
+e 5429.
The diagnostics for this warning reads:
Variable "@perl_widgets" will not stay shared at P:\test\422088.pl lin
+e 3475 (#4)
(W closure) An inner (nested) named subroutine is referencing a
lexical variable defined in an outer subroutine.
When the inner subroutine is called, it will probably see the valu
+e of
the outer subroutine's variable as it was before and during the *f
+irst*
call to the outer subroutine; in this case, after the first call t
+o the
outer subroutine is complete, the inner and outer subroutines will
+ no
longer share a common value for the variable. In other words, the
variable will no longer be shared.
Furthermore, if the outer subroutine is anonymous and references a
lexical variable outside itself, then the outer and inner subrouti
+nes
will never share the given variable.
This problem can usually be solved by making the inner subroutine
anonymous, using the sub {} syntax. When inner anonymous subs tha
+t
reference variables in outer subroutines are called or referenced,
+ they
are automatically rebound to the current values of such variables.
I wonder, without being able to find anything to confirm it, if these unshared closures are causing (part of) your memory leak.
As I say, I'm not sure if this could cause such a problem as I have never really understood the diagnostic, but it might be worth your further investigation.
Examine what is said, not who speaks.
Silence betokens consent.
Love the truth but pardon error.
|