週刊mosh - BoehmGC 7.1がヒープ壊す問題
0.2.7はGC周りでバグが見つかったのでGCをアップデートすることにしました。。そのうちRC2を出します。
修正されたIssue
- http://code.google.com/p/mosh-scheme/issues/detail?id=213
- Applyの引数チェックが不足している
先月のApplyの修正でエンバグ( http://code.google.com/p/mosh-scheme/issues/detail?id=204 )。
BoehmGC 7.1がヒープを壊す問題
メモリ消費の最適化のために、moshではBoehmGCのオプションDONT_ADD_BYTE_AT_ENDを有効にした。が、その変更がBoehmGC側のバグを表面化させてしまった。。
具体的には、"C++のnewで確保したGCメモリの末尾+1ワードがポインタかNULLで上書きされる"という挙動で、結局BoehmGC側の原因は分からなかった。従来は、GCが実際に必要なメモリ+1byteを余計に確保していたので、そこが緩衝地帯になって問題が表面化しなかった。
現在BoehmGC 7.2のCVS版に更新してテスト中。ちなみにこのCVS版はMIPSマシンやPS3、Native Clientをサポートしているので、今後はこれらのアーキテクチャでもMoshが動くかもしれない。(諸般の事情で、MIPSはmosh 0.2.6で特別対応している。)
DONT_ADD_BYTE_AT_ENDの問題は過去にGaucheも踏んでいる( http://osdir.com/ml/programming.garbage-collection.boehmgc/2008-05/msg00010.html )ので、最初はGCを疑っていなかった。結局、GC原因だと気づくためには、GCのスタックトレース採取機能が使えるLinuxでデバッグする必要があった。