週刊mosh - BoehmGC 7.1がヒープ壊す問題

0.2.7はGC周りでバグが見つかったのでGCをアップデートすることにしました。。そのうちRC2を出します。

修正されたIssue

先月の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が動くかもしれない。(諸般の事情で、MIPSmosh 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デバッグする必要があった。