From 235546ba049fe1e13517d075ec3ba9721af8cb54 Mon Sep 17 00:00:00 2001 From: kosaki Date: Sun, 10 Mar 2013 04:00:33 +0000 Subject: * io.c (rb_update_max_fd): use ATOMIC_CAS because this function is used from timer thread too. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39687 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'io.c') diff --git a/io.c b/io.c index 1ec1e8da95..ed8ae96d54 100644 --- a/io.c +++ b/io.c @@ -19,6 +19,7 @@ #include "id.h" #include #include +#include "ruby_atomic.h" #define free(x) xfree(x) @@ -158,10 +159,14 @@ void rb_update_max_fd(int fd) { struct stat buf; + if (fstat(fd, &buf) != 0 && errno == EBADF) { rb_bug("rb_update_max_fd: invalid fd (%d) given.", fd); } - if (max_file_descriptor < fd) max_file_descriptor = fd; + + while (max_file_descriptor < fd) { + ATOMIC_CAS(max_file_descriptor, max_file_descriptor, fd); + } } void -- cgit v1.2.3