ruby / zlib

Ruby interface for the zlib compression/decompression library
Other
50 stars 35 forks source link

Zlib.gzip sometimes errors out with Zlib::BufError if process has been forked #49

Open hmdne opened 1 year ago

hmdne commented 1 year ago

Ref: opal/opal#2463

The issue can't be reproduced reliably, the most reliable way is with the following code (you may need to launch it a couple of times) WARNING: it forks a lot of processes:

[user@localhost opal]# ruby _testzlib.rb 
_testzlib.rb:5:in `gzip': buffer error (Zlib::BufError)
    from _testzlib.rb:5:in `<main>'
[user@localhost opal]# _testzlib.rb:5:in `gzip': buffer error (Zlib::BufError)
    from _testzlib.rb:5:in `<main>'

[user@localhost opal]# 
[user@localhost opal]# cat _testzlib.rb 
require 'zlib'

10.times { fork }

Zlib.gzip("sdfasfasdfasdfasdasdfadfasdf" * 10000)
[user@localhost opal]# 

The issue has been seen on opal's CI since Ruby 2.6 until 3.1.

ianks commented 9 months ago

We’ve been getting this error fairly regularly. At first I thought it could be due to the thread wake-up issue, but after shipping #74 we still get the BufError.