ささだです.

http://d.hatena.ne.jp/nagachika/20110212/ruby_trunk_changes_30843_30852
で変更を知りました.

(2011/02/12 14:44), nobu wrote:
> Index: include/ruby/intern.h
> ===================================================================
> --- include/ruby/intern.h	(revision 30851)
> +++ include/ruby/intern.h	(revision 30852)
> @@ -797,6 +797,7 @@
>  int rb_thread_interrupted(VALUE thval);
>  VALUE rb_thread_blocking_region(rb_blocking_function_t *func, void *data1,
>  				rb_unblock_function_t *ubf, void *data2);
> +VALUE rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd);
>  #define RUBY_UBF_IO ((rb_unblock_function_t *)-1)
>  #define RUBY_UBF_PROCESS ((rb_unblock_function_t *)-1)
>  VALUE rb_mutex_new(void);

 新設された API (rb_thread_io_blocking_region) について質問です.背景
や,細かい実装を見ていないで質問します.すみません.

- ubf 無くて良いの?
- fd って1個だけなの?

 というか,このレイヤでこの処理(close したとき,別のスレッドに例外を発
生させるための前処理)を wrap するのは筋が悪いように思うのですが.せめ
て,blocking_region なんて名前はやめたほうが.

 ちなみに,POSIX や Windows だと,close しちゃうと他の待っているスレッ
ドに対してどういう挙動になるんでしょう.

 近永さんの日記

> Socket からの読み込みでブロック中に他のスレッドでその Socket を close
した時に例外が発生せずに待ってしまう不具合

を読むと,待っちゃうんでしょうか.他のインタプリタではどう処理してるんだ
ろう?

 すでに,ruby-core で議論済みでしたらすみません(未読が 963 通...).

-- 
// SASADA Koichi at atdot dot net