[Gauche-devel-jp] Re: port-current-lineについて

アーカイブの一覧に戻る

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






Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る