Fix intermittent failures in the LeakTracer on 5.18+, remove all workarounds
authorPeter Rabbitson <ribasushi@cpan.org>
Thu, 22 Jan 2015 22:27:22 +0000 (23:27 +0100)
committerPeter Rabbitson <ribasushi@cpan.org>
Fri, 23 Jan 2015 06:33:28 +0000 (07:33 +0100)
commit1a77219a542c2576b185a61e0787037ecd3fcb9b
tree9701a9f2b0ca17471f360dd52a4568634290593b
parent7617dcc477b643c32c043b68e0c6fdcbc7ec5ebb
Fix intermittent failures in the LeakTracer on 5.18+, remove all workarounds

ARGH! In the end the issue turned out to be stupid-simple: when PadWalker is
called it always returns us a hashref. This hashref is traversed, with its
own address recorded as seen. Once processed, the hashref itself is GCed,
leaving a stale entry in $seen_refs.

Up until 5.18 this was not a problem, likely due to no address reuse. However
after 5.18 PadWalker is very happy to return different hashrefs under the same
address over and over again. The $seen_refs entry leads to a skip, and the
actual contents of the pad are never examined - we've seen this hash already.

ARGH!

The decisive change is the single line around PadWalker - everything else is
cleanup of workarounds for this problem.
Changes
t/52leaks.t
t/lib/DBICTest/Util/LeakTracer.pm