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.
Hi!
The function
copyFile
in lib/copy/ncp.js assumes that thereadStream
was opened properly. When this assumption happens to be false, thewriteStream
associated with the operation will never close. Causing a lock on the "targetFilename" which in turn blocks (EPERM) all operations on "targetFilename" during the remainder of the application lifetime.This is the relevant line in the
ReadStream
class methodopen
. Notice that if an error occurred while opening the file, the stream is destroyed and an error is emitted. This is whatcopyFile
doesn't handle.It's hard to recreate this behaviour.. but in my test case, I monkey patched the
ReadStream.prototype.open
so that it fails with 'EBUSY' on the first call. Simulating an intrusive AV or whatnot.This is the output when running the test case:
This commit simply waits for
readStream
to emit anopen
event (which happens after error checking) before initializing a write stream.After commit:
(I'm not that experienced in contributing to open source projects via GitHub, so I'm sorry beforehand if I've misunderstood this whole pull request thing =))