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 *

ううむ。発覚しないものだな。メールで報告するべ。