# Zlib::GzipWriter - same code - different OS - different result

**URL:** <https://www.ruby-forum.com/t/zlib-gzipwriter-same-code-different-os-different-result/135559>\
**Category:** Ruby\
**Created:** [April 23, 2008, 5:51am UTC](https://www.ruby-forum.com/t/zlib-gzipwriter-same-code-different-os-different-result/135559 "2008-04-23T05:51:03Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![denmat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/13edae/32.png) [@denmat](https://www.ruby-forum.com/u/denmat)\
**Post date:** [April 23, 2008, 5:51am UTC](https://www.ruby-forum.com/t/zlib-gzipwriter-same-code-different-os-different-result/135559/1 "2008-04-23T05:51:03Z")

</div>

Hi List,

I have ruby-1.8.6.114-1.fc7 and archive-tar-minitar (0.5.2).

If I run this script on windowsXP (ruby1.8.6.26 archive-tar-minitar  
(0.5.2)) it completes without a problem  
def tar\_and\_gzip(destination, paths)  
Zlib::GzipWriter.new(File.open(destination, ‘wb’)) do |gzip|  
begin  
out = Archive::Tar::Minitar::Output.new(gzip)  
paths.each do |f|  
Find.find(f) do |files|  
if FileTest.file?(files)  
Minitar.pack\_file(files, out)  
$logger.info(‘tar\_and\_gzip’) { “Packing file:  
#{files}” }  
Find.prune  
elsif FileTest.directory?(files)  
Minitar.pack\_file(files, out)  
$logger.info(‘tar\_and\_gzip’) { “Packing  
directory: #{files}” }  
else  
$logger.info(‘tar\_and\_gzip’) { “Finished packing  
files.” }  
Find.prune  
end  
end  
end  
ensure  
gzip.finish # same result with gzip.close  
end  
end  
end

destination = ‘…/buildspace’  
tar\_me = [“control”, “postinst”, “md5sum”]

tar\_and\_gzip("#{destination}/control.tar.gz", tar\_me )

(\* only changes to above script on the different boxes is the file  
paths)  
Yet the same script on my linux box produces:  
zlib(finalizer): Zlib::GzipWriter object must be closed explicitly.  
zlib(finalizer): the stream was freed prematurely.  
zlib(finalizer): Zlib::GzipWriter object must be closed explicitly.  
zlib(finalizer): the stream was freed prematurely.

Anyone seen this before or should I submit as a bug?

denmat

---

<div class="post-metadata">

**Author:** ![denmat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/13edae/32.png) [@denmat](https://www.ruby-forum.com/u/denmat)\
**Post date:** [April 23, 2008, 6:57am UTC](https://www.ruby-forum.com/t/zlib-gzipwriter-same-code-different-os-different-result/135559/2 "2008-04-23T06:57:49Z")

</div>

On Apr 22, 2008, at 20:50 PM, denmat wrote:

> Hi List,
> 
> I have ruby-1.8.6.114-1.fc7 and archive-tar-minitar (0.5.2).
> 
> If I run this script on windowsXP (ruby1.8.6.26 archive-tar-minitar  
> (0.5.2)) it completes without a problem  
> def tar\_and\_gzip(destination, paths)  
> Zlib::GzipWriter.new(File.open(destination, ‘wb’)) do |gzip|

Try:

open destination, ‘wb’ do |io|  
Zlib::GzipWriter.wrap io do |gzip|

> ```
> elsif FileTest.directory?(files)
> 
> ```
> 
> ensure  
> gzip.finish # same result with gzip.close

And remove this.

---

<div class="post-metadata">

**Author:** ![denmat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/13edae/32.png) [@denmat](https://www.ruby-forum.com/u/denmat)\
**Post date:** [April 23, 2008, 8:52am UTC](https://www.ruby-forum.com/t/zlib-gzipwriter-same-code-different-os-different-result/135559/3 "2008-04-23T08:52:06Z")

</div>

On Apr 23, 2:57 pm, Eric H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > out = Archive::Tar::Minitar::Output.new(gzip)  
> > directory: #{files}" }  
> > And remove this.  
> > (\* only changes to above script on the different boxes is the file  
> > paths)  
> > Yet the same script on my linux box produces:  
> > zlib(finalizer): Zlib::GzipWriter object must be closed explicitly.  
> > zlib(finalizer): the stream was freed prematurely.  
> > zlib(finalizer): Zlib::GzipWriter object must be closed explicitly.  
> > zlib(finalizer): the stream was freed prematurely.
> 
> > Anyone seen this before or should I submit as a bug?
> 
> > denmat

thank you that works.
