[Gauche-devel-jp] select (Re: scskkd, Gauche-cdb)

アーカイブの一覧に戻る

Shiro Kawai shiro****@lava*****
2003年 11月 25日 (火) 13:34:32 JST


From: Hosaka Y <hos****@taman*****>
Subject: [Gauche-devel-jp] scskkd, Gauche-cdb
Date: Sun, 23 Nov 2003 16:45:54 +0900

> ・ sys-select でブロック中に signal で割り込まれ、set-signal-handler!
>    で設定したハンドラから帰ってきたとき、
> 
>      select failed: Success
> 
>    というエラーが発生します。

ああ、これは私もたまに遭遇して気になっていました。
確かに不自然ですね。

現在は、システムコールは全て次のような流れで処理されています。

   r = system_call(...);
   if (r < 0 /* または r == NULL */ && errno == EINTR) {
      errno = 0;
      Schemeシグナルハンドラ呼び出し
   }
   return r;

シグナルは全てSchemeのハンドラで処理されることを想定しているのですが、
これでは確かに割り込まれた後の再試行を書けませんね。
select(2)だけでなく、readやwriteでも同じ問題が発生しますね。

EINTRの場合は無条件にシステムコールを再発行してしまって良いかなあ。
続行したくない場合はシグナルハンドラから例外を投げることができますし。

>    として、slib の format を利用しようとしたのですが、slib/format.scm
>    がロードされません。
>    lib/slib.scm で *features* に format を設定していますが、Gauche の
>    format と slib の format はサポートしているフォーマット指示子が違う
>    ため、これではまずいと思います。

はい、これは以前指摘があって、0.7.3より *features* にformatが含まれなく
なります。

> ・ dbm.scm から dbm-db-* が export されていません。

直しておきます。

--shiro



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