From: SASADA Koichi Date: 2011-02-13T03:49:11+09:00 Subject: [ruby-dev:43199] Re: [ruby-changes:18827] Ruby:r30852 (trunk): * thread.c (rb_thread_io_blocking_region): new function to run  ささだです. 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