[SP-pm] "leak" no DBIx::Class?

Tiago Peczenyj tiago.peczenyj at gmail.com
Mon Nov 14 03:51:04 PST 2011


Mas o Stanislaw esta usando perl 5.10?

Achei que o recomendado era 5.12 e 5.14 pois nenhum bugfix seria
aplicado mais no 5.10.x

2011/11/14 Gabriel Andrade <gabiruh at gmail.com>:
>
> 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: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br


More information about the SaoPaulo-pm mailing list