On Nov 13, 2011, at 6:24 PM, Stanislaw Pusep wrote:

> Wallace: boa, fiz o downgrade para e funcionou perfeitamente... Na tentativa 
> e erro, descobri que o *leak* foi introduzido no DBIx-Class-0.08194.
> Eden: where is your God now?
> 

Vamos lá:

  $ git clone git://git.shadowcat.co.uk/dbsrgits/DBIx-Class.git ; cd DBIx-Class;
  $ git diff v0.08193..v0.08194 lib/

Dando uma olhada por cima, o único trecho suspeito parece ser esse:

diff --git a/lib/DBIx/Class/Storage/DBI/Pg.pm 
b/lib/DBIx/Class/Storage/DBI/Pg.pm                                              
                                                     
index f4dbda6..0dc7ea8 100644                                                   
                                                                                
                  
--- a/lib/DBIx/Class/Storage/DBI/Pg.pm                                          
                                                                                
                   
+++ b/lib/DBIx/Class/Storage/DBI/Pg.pm

(...)

   require DBD::Pg;                                                             
                                                                                
                  
-  if ($DBD::Pg::VERSION < 2.009002) {                                          
                                                                                
                   
-    carp_once( __PACKAGE__.": DBD::Pg 2.9.2 or greater is strongly 
recommended\n" );                                                               
                              
+                                                                               
                                                                                
                  
+  if ($self->_server_info->{normalized_dbms_version} >= 9.0) {                 
                                                                                
                  
+    if (not try { DBD::Pg->VERSION('2.17.2') }) {                              
                                                                                
                   
+      carp_once( __PACKAGE__.': BYTEA columns are known to not work on Pg >='  
                                                                                
                   
+        . " 9.0 with DBD::Pg < 2.17.2\n" );                                    
                                                                                
                   
+    }                                                                          
                                                                                
                   
+  }                                                                            
                                                                                
                   
+  elsif (not try { DBD::Pg->VERSION('2.9.2') }) {                              
                                                                                
                   
+    carp_once( __PACKAGE__.': DBD::Pg 2.9.2 or greater is strongly 
recommended'                                                                    
                               
+      . "for BYTEA column support.\n" );                                       
                                                                                
                  
   }                                  

Esse commit mostra que deixou-se de testar a versão usando a variável escalar 
$VERSION no pacote do DBD::Pg e passou-se a confiar no UNIVERSAL::VERSION, que 
é conhecido por vazar memória nas versões do perl 5.10+ [1]. Esse bug já foi 
consertado nas versões 5.12.4+.

Uma busca no source do dbic ( ack -Q -- '->VERSION' lib/ ) mostrou que o uso do 
UNIVERSAL::VERSION aparece também em DBIx::Class::Storage::DBI::ADO e 
DBIx::Class::Optional::Dependencies. Como o DBIC::O::D é usado somente durante 
o processo de instalação/testes para reportar erros de dependências, e também 
acredito que você não está se misturando com a gentalha da M$... então podemos 
inferir que você esteja usando o PostgreSQL, portanto, em algum momento a 
execução passa por esse caminho do código.

Dado os supracitados fatos, só nos resta supor que o motivo do leak é o seu 
perl antigo, provavelmente um 5.10ish, em conjunto com um UNIVERSAL::VERSION 
vazando a torto e a direito.

Veredito: o DBIx::Class é inocente. :)


Putz.. se eu errei, pelo menos foi um bom uso de lógica dedutiva no processo de 
investigação.

[1] - 
http://grokbase.com/p/perl.org/perl5-changes/2011/08/perl-git-branch-maint-5-12-updated-v5-12-4-20-g082c8d2/30gxbrcxoo4u2y4xxux3fwfod3vq
=begin disclaimer
   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
 SaoPaulo-pm mailing list: [email protected]
 L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer

Responder a