Only allow known globals in SQL::Translator leak allowance
Dagfinn Ilmari Mannsåker [Wed, 23 Jan 2013 12:07:33 +0000 (12:07 +0000)]
Changes
t/52leaks.t

diff --git a/Changes b/Changes
index 1b128ad..94974b1 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,8 @@
 Revision history for DBIx::Class
 
+    * Misc
+        - Only allow known globals in SQL::Translator leak allowance
+
 0.08205 2013-01-22
     * New Features / Changes
         - The emulate_limit() arbitrary limit dialect emulation mechanism is
index 8f36669..27e4e22 100644 (file)
@@ -361,8 +361,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