Para deixar as pessoas saberem, troquei e-mails com o autor do Compress :: Zlib e ele confirmou que esse é um bug que ele abordará em uma versão futura. -mark
Estou enlouquecendo com isso ...
Eu venho usando a função gzflush () há anos na minha ferramenta collectl e recentemente notei algo muito incomum nela no debian. Eu estou realmente pensando que é mais o fato de que é uma versão mais recente do Zlib.
O problema parece ser a funcionalidade mudada em algum lugar ao longo do caminho e enquanto eu posso codificar em torno das múltiplas versões que eu gostaria de perguntar aos outros se eles já viram isso ou sabem exatamente o que está acontecendo. / p>Especificamente, se eu criar 2 arquivos compactados e imediatamente gzflush-los com um valor de 2, o que equivale a Z_SYNC_FLUSH, ele funciona bem. Mas se eu tentar liberá-los uma segunda vez, pelo menos no debian executando o zlib V2.02, ele falhará. O código idêntico funciona bem em rhel5.2 e zlib V1.42.
Contanto que eu não tente liberar um arquivo que já tenha sido liberado, a versão debian parece estar ok, mas estou achando isso muito chato e imaginando se é algo que estou fazendo errado?
aqui está meu reprodutor:
#!/usr/bin/perl -w
use Compress::Zlib;
printf "%d %d %d %d %d\n", Z_FINISH, Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_BLOCK;
#require "Compress/Zlib.pm";
$aaa=Compress::Zlib::gzopen("/tmp/foo.gz", 'ab') or die "flush error";
$bbb=Compress::Zlib::gzopen("/tmp/foo.gz", 'ab') or die "flush error";
$m=2;
print "Flush AAA\n";
$aaa-> gzflush($m)<0 and error($aaa);
print "Flush BBB\n";
$bbb->gzflush($m)<0 and error($bbb);
print "Flush AAA\n";
$aaa-> gzflush($m)<0 and error($bbb);
print "Flush BBB\n";
$bbb->gzflush($m)<0 and error($bbb);
sub error
{ printf "Flush error reason: %s\n", $_[0]->gzerror(); $_[0]->gzclose(); exit; }
rodando isso no debian eu vejo isso:
./test.pl
4 0 2 3 5
Flush AAA
Flush BBB
Flush AAA
Flush error reason: buffer error
enquanto o mesmo script no meu sistema rhel anterior faz isso. Eu notei que o símbolo Z_BLOCK não está definido na versão anterior, então o removi da declaração print no começo:
./test.pl
4 0 2 3
Flush AAA
Flush BBB
Flush AAA
Flush BBB
Para deixar as pessoas saberem, troquei e-mails com o autor do Compress :: Zlib e ele confirmou que esse é um bug que ele abordará em uma versão futura. -mark
Tags perl