unicorn 0.96.1 - fix leak in Rainbows!/Zbateryv0.96.1
commitec8ca22c45e9cd303dfbb6a9ee2f0036ae8c9cb8
authorEric Wong <normalperson@yhbt.net>
Sat, 13 Feb 2010 08:35:36 +0000 (13 00:35 -0800)
committerEric Wong <normalperson@yhbt.net>
Sat, 13 Feb 2010 08:35:36 +0000 (13 00:35 -0800)
tree1a8dce799fee321a1941005cb77656773c1409f9
parentafdc6fce5f7e34a5c07f24204625cd466e93e5ac
unicorn 0.96.1 - fix leak in Rainbows!/Zbatery

This maintenance release is intended for users of Rainbows! and
Zbatery servers (and anybody else using Unicorn::HttpParser).

This memory leak DID NOT affect Unicorn itself: Unicorn always
allocates the HttpParser once and always reuses it in every
sequential request.

This leak affects applications that repeatedly allocate a new
HTTP parser.  Thus this bug affects _all_ deployments of
Rainbows! and Zbatery.  These servers allocate a new parser for
every client connection to serve clients concurrently.

I misread the Data_Make_Struct()/Data_Wrap_Struct()
documentation and ended up passing NULL as the "free" argument
instead of -1, causing the memory to never be freed.

From README.EXT in the MRI source which I misread:
> The free argument is the function to free the pointer
> allocation.  If this is -1, the pointer will be just freed.
> The functions mark and free will be called from garbage
> collector.
GIT-VERSION-GEN
lib/unicorn/const.rb