summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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'" }'