Fix: fs.open callback did not fire
Problem: Omitting the mode parameter causes the provided callback parameter to never fire. This was originally fixed in 6078c37b and later broken in 5f2e9093. Solution: Overwriting the value of a parameter also overwrites the reference in the arguments object. This patch works arround this fact by not touching the mode parameter until a reference to the callback has been established.
This commit is contained in:
parent
a293f90db4
commit
29b0dc4ec8
@ -185,10 +185,11 @@ function modeNum(m, def) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fs.open = function(path, flags, mode, callback) {
|
fs.open = function(path, flags, mode, callback) {
|
||||||
mode = modeNum(mode, '0666');
|
|
||||||
var callback_ = arguments[arguments.length - 1];
|
var callback_ = arguments[arguments.length - 1];
|
||||||
var callback = (typeof(callback_) == 'function' ? callback_ : null);
|
var callback = (typeof(callback_) == 'function' ? callback_ : null);
|
||||||
|
|
||||||
|
mode = modeNum(mode, '0666');
|
||||||
|
|
||||||
binding.open(path, stringToFlags(flags), mode, callback || noop);
|
binding.open(path, stringToFlags(flags), mode, callback || noop);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
17
test/simple/test-fs-open.js
Normal file
17
test/simple/test-fs-open.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
var openFd;
|
||||||
|
fs.open(__filename, 'r', function(err, fd) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
openFd = fd;
|
||||||
|
});
|
||||||
|
|
||||||
|
process.addListener('exit', function() {
|
||||||
|
assert.ok(openFd);
|
||||||
|
});
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user