ext: fix memory leak when reentrant/multithreadedv0.3.1
authorEric Wong <normalperson@yhbt.net>
Sat, 13 Feb 2010 09:35:55 +0000 (01:35 -0800)
committerEric Wong <normalperson@yhbt.net>
Sat, 13 Feb 2010 09:35:55 +0000 (01:35 -0800)
commit4247fafd0f361d2373df7213a1a0028554e93d93
treee4e8e3f52b909725264463993422779892e3cdd4
parent883368f745af13a57b3784b834001a82823eee05
ext: fix memory leak when reentrant/multithreaded

The optional C extension leaked memory due to improper use of
the Ruby API, causing duplicated objects to never be garbage
collected.

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.
ext/clogger_ext/clogger.c
test/test_clogger.rb