Issue #13276 has been updated by James Mead.

Subject changed from Dir.glob returns empty array when OS has no more file handles (silent failure) to Dir.glob returns empty array when OS has no more file handles (expected exception)

----------------------------------------
Bug #13276: Dir.glob returns empty array when OS has no more file handles (expected exception)
https://bugs.ruby-lang.org/issues/13276#change-63351

* Author: James Mead
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin14]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
The following terminal session demonstrates how `Dir.glob` returns an empty array when the OS has run out of file handles; whereas `File.new` raises a `Errno::EMFILE` exception.

I would expect `Dir.glob` to fail fast in a similar way to `File.new`.

~~~
$ mkdir /tmp/ruby-dir-glob-returns-empty-array-when-too-many-open-files
$ cd /tmp/ruby-dir-glob-returns-empty-array-when-too-many-open-files
$ touch foo
$ ulimit -n 16
$ ruby -e "1.upto(16).map { |i| p [i, Dir.glob('*')]; File.new('foo') }"
[1, ["foo"]]
[2, ["foo"]]
[3, ["foo"]]
[4, ["foo"]]
[5, ["foo"]]
[6, ["foo"]]
[7, ["foo"]]
[8, ["foo"]]
[9, ["foo"]]
[10, []] # Dir.glob returns empty array and does not raise exception
-e:1:in `initialize': Too many open files @ rb_sysopen - foo (Errno::EMFILE)
	from -e:1:in `new'
	from -e:1:in `block in <main>'
	from -e:1:in `upto'
	from -e:1:in `each'
	from -e:1:in `map'
	from -e:1:in `<main>'
~~~



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>