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

Back to archive index

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



Gauche-devel-jp メーリングリストの案内
Back to archive index