aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-10-21 07:06:27 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-10-21 07:06:27 +0000
commit526c89a6d4fea76b714de4b0af943c95af9e0abc (patch)
tree00624764806a2081d6988a8553523d1cbe190721
parentade46bbba9c27f575c8a7d6f692170eca8f2af90 (diff)
downloadruby-526c89a6d4fea76b714de4b0af943c95af9e0abc.tar.gz
ruby.c: retry loading with GC
* ruby.c (open_load_file): retry after GC when the limit for open file descriptors reached. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--ruby.c8
2 files changed, 12 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index f26eae7ac1..bab1afbdd0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Oct 21 16:06:25 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (open_load_file): retry after GC when the limit for open
+ file descriptors reached.
+
Fri Oct 21 11:34:17 2016 Pascal Schmid <Lechindianer@users.noreply.github.com>
* string.c (rb_str_sub, rb_str_gsub): [DOC] 'backlash' should read
diff --git a/ruby.c b/ruby.c
index b21a32638b..feae61da64 100644
--- a/ruby.c
+++ b/ruby.c
@@ -1899,7 +1899,13 @@ open_load_file(VALUE fname_v, int *xflag)
#endif
if ((fd = rb_cloexec_open(fname, mode, 0)) < 0) {
- rb_load_fail(fname_v, strerror(errno));
+ int e = errno;
+ if (!rb_gc_for_fd(e)) {
+ rb_load_fail(fname_v, strerror(e));
+ }
+ if ((fd = rb_cloexec_open(fname, mode, 0)) < 0) {
+ rb_load_fail(fname_v, strerror(errno));
+ }
}
rb_update_max_fd(fd);