summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTomoyuki Sahara <[email protected]>2013-11-16 16:04:31 +0900
committerTomoyuki Sahara <[email protected]>2013-11-16 16:04:31 +0900
commit87d878292d16bddad811a5cfd897ba27884bec8c (patch)
treed5ad043479752a0d9d7004a611b2035f3d2a12ce
parente44da8a6cc587ba729bbc4ace0ca164f656207d8 (diff)
downloadmruby-87d878292d16bddad811a5cfd897ba27884bec8c.tar.gz
mruby-87d878292d16bddad811a5cfd897ba27884bec8c.zip
Try GC when Too many open files (revert a part of 1e8097a).
-rw-r--r--mrblib/file.rb7
-rw-r--r--test/gc_filedes.sh4
2 files changed, 10 insertions, 1 deletions
diff --git a/mrblib/file.rb b/mrblib/file.rb
index 243549cbb..048fbae80 100644
--- a/mrblib/file.rb
+++ b/mrblib/file.rb
@@ -14,7 +14,12 @@ class File < IO
super(fd_or_path, mode)
else
@path = fd_or_path
- fd = IO.sysopen(@path, mode, perm)
+ begin
+ fd = IO.sysopen(@path, mode, perm)
+ rescue Errno::EMFILE
+ GC.start
+ fd = IO.sysopen(@path, mode, perm)
+ end
super(fd, mode)
end
end
diff --git a/test/gc_filedes.sh b/test/gc_filedes.sh
new file mode 100644
index 000000000..6e5d1bbf1
--- /dev/null
+++ b/test/gc_filedes.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+ulimit -n 20
+mruby -e '100.times { File.open "'$0'" }'