python-cdb の Bug
Red Hat Linux Enterprise Linux WS 4 の glibc はメモリチェックが厳しいらしく、python-cdbを使うと
*** glibc detected *** double free or corruption (out): 0x0000002a955ea030 ***
とか言って abort しやがる。
で、新山さんの Pure Python版 pycdbを使おうかと思ったら file オブジェクトをそのまま使っているわ、いちいちキーを unpack して比較するわで DB がでかいと遅すぎる(同じハッシュ値を持つキーを線形探索するので)。mmap 使うようにして、unpack しないで比較するようにしてみたけど、やっぱり 1件の検索に 0.3 秒はかかる。遅い。
あきらめて Python のマニュアル見ながら python-cdb のソースを見て怪しいコードを探すと案外簡単に見つかった。
diff -ru python-cdb-0.32.orig/src/cdbmodule.c python-cdb-0.32/src/cdbmodule.c --- python-cdb-0.32.orig/src/cdbmodule.c 2002-01-26 23:42:53.000000000 -0500 +++ python-cdb-0.32/src/cdbmodule.c 2006-12-18 13:04:06.093048000 -0500 @@ -655,7 +655,7 @@ cdb_free(&self->c); - PyMem_DEL(self); + PyObject_DEL(self); } static PyObject *
ううむ。発覚しないものだな。メールで報告するべ。