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
delete $weak_registry->{$slot}
unless $cleared->{hash_merge_singleton}{$weak_registry->{$slot}{weakref}{behavior}}++;
}
- elsif (DBIx::Class::_ENV_::INVISIBLE_DOLLAR_AT and $slot =~ /^__TxnScopeGuard__FIXUP__/) {
+ elsif (
+ $slot =~ /^Data::Dumper/
+ and
+ $weak_registry->{$slot}{stacktrace} =~ /\QDBIx::Class::ResultSource::RowParser::_mk_row_parser/
+ ) {
+ # there should be only one D::D object (used to construct the rowparser)
+ # more would indicate trouble
delete $weak_registry->{$slot}
+ unless $cleared->{mk_row_parser_dd_singleton}++;
}
elsif ($slot =~ /^DateTime::TimeZone/) {
# DT is going through a refactor it seems - let it leak zones for now
# 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);