Fix an infinite loop when attempting to read from a directory #4817
+23
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When attempting to open a directory with
File.open
and then read from it, JRuby 9.1.13.0 (on platforms other than Windows) will enter an infinite loop and hang:When attempting to do the same with MRI (tested with versions 1.9.3 through to 2.4.2) an
Errno::EISDIR
exception is raised:The hang occurs because
OpenFile.fillbuf()
andOpenFile.ioBufread()
loop to retry on errors. This is desirable for temporary errors likeEAGAIN
, but not for permanent errors likeEISDIR
.This pull request modifies
OpenFile.waitReadable()
to abort retries when a permanent error is encountered. It also changesHelpers.errnoFromException()
to map the"Is a directory"
IOException
message toEISDIR
.This change only applies to non-Windows platforms. On Windows,
File.open
raises an exception instead.