groonga/groonga — pull request #221 by naoa (2014-10-18 08:28:36+00:00)
Title: Fix memory leak in compress zlib/lzo column

現在のGroongaでは、zlib圧縮、lzo圧縮させたカラムを参照すると、
伸長させるためにメモリアロケーションした``value``を開放するタイミング
がなく、メモリリークとなっています。
（既知の不具合で現在、デフォルトでは作れないようになっています。）

https://github.com/groonga/groonga/blob/master/lib/store.c#L1215

これを回避する方法として、``grn_io_win``に圧縮データを伸長させた値
へのポインタを保持するメンバ``value``を追加するのはいかがでしょうか？

``grn_io_win``にMALLOCしたポインタを保持させれば、``grn_ja_unref``で
メモリを開放させてやることができます。

これにより、APIに大きな変更を与えることなくzlib圧縮がメモリリーク
することなく使えるようになると思うのですがいかがでしょうか？

（そもそも``grn_io_win``に乗せるべき値ではないかもしれませんし、
APIの仕様を変えたほうがいいのかもしれませんが。。）

お手数ですが、ご検討ください。

伸長にかかるCPUコストやメモリアロケーションのコストにより、どれほど
利用価値があるものになるかはまだ検証できていませんが、zlibの圧縮率
は高く、Groongaはカラム指向でカラムごとに柔軟に設定できるので、
zlib圧縮が使えると非常に嬉しいなぁと考えています。