Shiro Kawai
shiro****@lava*****
2004年 2月 20日 (金) 23:00:48 JST
From: HIRAUCHI Hideyuki <hira****@verys*****> Subject: [Gauche-devel-jp] Re: port-current-lineについて Date: Fri, 20 Feb 2004 22:40:55 +0900 > > ネックは、port処理中にエラーが発生した場合に必ずportのロックが > > consistentになることを保証しなければならないってところです。 > > そのために、今はエラーを投げる可能性のある部分を全てPORT_SAFE_CALLで > > 覆っているので、単純に関数の中身だけinlineで括り出すことが難しくなっています。 > ううう、すぐに理解できない。 > 一度自分で書いてみないと理解できないだろうなぁ。 具体的には、Gaucheでエラーを投げるコード (Scm_Error等) はlongjmp してしまうため、何も対応していないと、portのロックを握ったままScm_Getc 等のルーチンを抜けてしまう可能性があるということです。 それを防ぐために、PORT_SAFE_CALL中ではSCM_UNWIND_PROTECTというマクロ (src/gauche/vm.h)でlongjmpで飛んでくるやつを一度捕まえて、 確実にアンロックするようにしています。 --shiro