* io.c (rb_io_wait_writable): use rb_thread_check_ints() instead
of rb_thread_fd_writable(). * io.c (rb_io_wait_readable): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38555 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c0a5027235
commit
398581564d
@ -1,3 +1,9 @@
|
||||
Sat Dec 22 21:47:55 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
|
||||
|
||||
* io.c (rb_io_wait_writable): use rb_thread_check_ints() instead
|
||||
of rb_thread_fd_writable().
|
||||
* io.c (rb_io_wait_readable): ditto.
|
||||
|
||||
Sat Dec 22 20:31:10 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* object.c (rb_mod_const_get): symbol cannot be nested constant name.
|
||||
|
15
io.c
15
io.c
@ -1050,6 +1050,9 @@ rb_io_wait_readable(int f)
|
||||
#if defined(ERESTART)
|
||||
case ERESTART:
|
||||
#endif
|
||||
rb_thread_check_ints();
|
||||
return TRUE;
|
||||
|
||||
case EAGAIN:
|
||||
#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
|
||||
case EWOULDBLOCK:
|
||||
@ -1073,6 +1076,18 @@ rb_io_wait_writable(int f)
|
||||
#if defined(ERESTART)
|
||||
case ERESTART:
|
||||
#endif
|
||||
/*
|
||||
* In old Linux, several special files under /proc and /sys don't handle
|
||||
* select properly. Thus we need avoid to call if don't use O_NONBLOCK.
|
||||
* Otherwise, we face nasty hang up. Sigh.
|
||||
* e.g. http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=31b07093c44a7a442394d44423e21d783f5523b8
|
||||
* http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=31b07093c44a7a442394d44423e21d783f5523b8
|
||||
* In EINTR case, we only need to call RUBY_VM_CHECK_INTS_BLOCKING().
|
||||
* Then rb_thread_check_ints() is enough.
|
||||
*/
|
||||
rb_thread_check_ints();
|
||||
return TRUE;
|
||||
|
||||
case EAGAIN:
|
||||
#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
|
||||
case EWOULDBLOCK:
|
||||
|
Loading…
x
Reference in New Issue
Block a user