Skip to content

Commit ccf4afa

Browse files
tobiery
authored andcommitted
Do not emit WriteStream's drain event before ws.write has been called.
1 parent f5e4047 commit ccf4afa

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

lib/fs.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,10 @@ WriteStream.prototype.flush = function () {
840840
var self = this;
841841

842842
var args = this._queue.shift();
843-
if (!args) return self.emit('drain');
843+
if (!args) {
844+
if (this.drainable) { self.emit('drain'); }
845+
return;
846+
}
844847

845848
this.busy = true;
846849

@@ -896,6 +899,8 @@ WriteStream.prototype.write = function (data) {
896899
throw new Error('stream not writeable');
897900
}
898901

902+
this.drainable = true;
903+
899904
var cb;
900905
if (typeof(arguments[arguments.length-1]) == 'function') {
901906
cb = arguments[arguments.length-1];

test/simple/test-fs-write-stream.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,12 @@ var file = path.join(common.fixturesDir, "write.txt");
1717
stream.destroy();
1818
})();
1919

20+
(function() {
21+
var stream = fs.createWriteStream(file);
22+
23+
stream.addListener('drain', function () {
24+
assert.fail('"drain" event must not be emitted before stream.write() has been called at least once.')
25+
});
26+
stream.destroy();
27+
})();
28+

0 commit comments

Comments
 (0)