昨日のSCM_NEWのチェックの残りを行った。
とりあえず、チェックの結果、SCM_NEW*系マクロを呼び出している関数単体では、SCM_NEW*内で継続呼び出し(というかlongjmp?)して途中で脱出した時に怪しくなりそうなものは一つも存在しない事が自分の中で確認された。

  • 但し、人間の目によるチェックなので、漏れのある可能性が残る事には注意。
  • vm.cの中の、run_loop()の外側でmallocされる部分は、Scm_Errorなり継続呼び出しで抜ける事は無理なのでまずいと思うが、これは今のところ、通常の使用では1プロセスにつき1vmしか割り当てないだろうと思うので、無視する事にした。将来に1プロセス内に複数vmを持てるようにした時に問題になる可能性はあるけど。
    • 昨日書いたパッチでは、Scm_Init()時のみ、malloc失敗時は常にScm_Panic()するようにして、この問題を回避(?)していた。


しかし、今回チェックしたのは、SCM_NEW*系マクロを内部で呼び出す関数単体でのチェックのみ。なので、その関数を呼び出す外でロック/アンロックをしていて、SCM_UNWIND_PROTECTが無いところが、Shiroさんによると、どうもあるらしい。
折角だから、SCM_INTERNAL_MUTEX_LOCKとSCM_INTERNAL_MUTEX_UNLOCKに囲まれた部分のチェックも行う事にする。あとで。
チェックが終わったら、WiLiKiのページの「チェック中です」と書いていた部分を変更する事。


おまけとして得られた知識:

  • indexの複数形は正しくはindicesらしい。