Shiro Kawai
shiro****@lava*****
2004年 2月 23日 (月) 06:11:04 JST
From: HIRAUCHI Hideyuki <hira****@verys*****> Subject: [Gauche-devel-jp] Re: port-current-lineについて Date: Mon, 23 Feb 2004 01:52:27 +0900 > portapi_0.c(2歩戻るってやつ)を書きながらふと疑問に思ったのですが、 > エラーを発生させるときに、 > > 1. 自分がportをロックしているかどうか調べる > 2. 自分がportをロックしていたら、解放する > 3. エラーを投げる > > ていうことは出来ないのでしょうか? [...] > p->lockOwnerが自分か否かだけを判断すれば例外を投げる前にロックを > はずせそうだ。。。と思ったんですが、ロックを握ったまま、 > ちゃんと例外を処理して正常稼働を続ける方法が無くなるのか。 > > でも、mt-safeにしたいなら、catchしたらまたロックしてから処理してね、 > とすればいいのか? 今のところ、自分がロックしているportを知る汎用的な方法が無いです。 スレッド毎にロックしたポートを登録するスタックを持っておけば良いか? ただ、ロックを握ったままのエラー処理をやるなら、with-error-handler でスタックを捕まえておく必要がありますね。 それなら、どうせdynamic wind stackの処理と似たようなものなので、 PORT_SAFE_CALLでsigsetjmpを使わずにdynamic windで処理するって 手も考えられます。 ;; 現在のdynamic windは1つのクロージャと1つのコンスセルのアロケート ;; が必要ですが、工夫すればアロケーションは一つで済ませられるかも。 ;; そうすると案外sigsetjmpよりも軽かったりするかな? --shiro