X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F52leaks.t;h=4bc48aba7b51ec58074bbb2137b16ce8c3941879;hb=c36f8d8d60e965f3409e8f77dda9a7eab6621540;hp=8f36669f45c40b64bdc59cfc52b0406373358071;hpb=5815ffb0e34dcd74af49581f65e1d5aa71779a6b;p=dbsrgits%2FDBIx-Class.git diff --git a/t/52leaks.t b/t/52leaks.t index 8f36669..4bc48ab 100644 --- a/t/52leaks.t +++ b/t/52leaks.t @@ -302,7 +302,15 @@ my @compose_ns_classes; SKIP: { if ( DBIx::Class::Optional::Dependencies->req_ok_for ('test_leaks') ) { - Test::Memory::Cycle::memory_cycle_ok ($base_collection, 'No cycles in the object collection') + my @w; + local $SIG{__WARN__} = sub { $_[0] =~ /\QUnhandled type: REGEXP/ ? push @w, @_ : warn @_ }; + + Test::Memory::Cycle::memory_cycle_ok ($base_collection, 'No cycles in the object collection'); + + if ( $] > 5.011 ) { + local $TODO = 'Silence warning due to RT56681'; + is (@w, 0, 'No Devel::Cycle emitted warnings'); + } } else { skip 'Circular ref test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_leaks'), 1; @@ -361,8 +369,10 @@ for my $slot (keys %$weak_registry) { delete $weak_registry->{$slot}; } elsif ($slot =~ /^SQL::Translator::Generator::DDL::SQLite/) { - # SQLT got much better, but still leaks a little - delete $weak_registry->{$slot}; + # SQLT::Producer::SQLite keeps global generators around for quoted + # and non-quoted DDL, allow one for each quoting style + delete $weak_registry->{$slot} + unless $cleared->{sqlt_ddl_sqlite}->{@{$weak_registry->{$slot}{weakref}->quote_chars}}++; } elsif ($slot =~ /^Hash::Merge/) { # only clear one object of a specific behavior - more would indicate trouble @@ -408,13 +418,16 @@ for my $moniker ( keys %{DBICTest::Schema->source_registrations || {}} ) { # half of it is in XS no leaktracer sees it, and Devel::FindRef is equally # stumped when trying to trace the origin. The problem is: # -# $cond_object --> result_source --> schema --> storage --> $dbh --> {cached_kids} +# $cond_object --> result_source --> schema --> storage --> $dbh --> {CachedKids} # ^ / # \-------- bound value on prepared/cached STH <-----------/ # -if ( my $r = $weak_registry->{'basic leaky_resultset_cond'}{weakref} ) { - ok(! defined $r, 'Self-referential RS conditions no longer leak!') - or $r->result_source(undef); +{ + local $TODO = 'This fails intermittently - see RT#82942'; + if ( my $r = $weak_registry->{'basic leaky_resultset_cond'}{weakref} ) { + ok(! defined $r, 'Self-referential RS conditions no longer leak!') + or $r->result_source(undef); + } } assert_empty_weakregistry ($weak_registry);