From 6e2d5af0e4164d4b1a827a86b8eafa3b5fcaebe0 Mon Sep 17 00:00:00 2001 From: Kohei Hiraga Date: Mon, 2 Apr 2018 01:58:16 +0900 Subject: [PATCH] fs: fix missing 'error' event in (Read|Write)Stream#destroy fs.ReadStream / fs.WriteStream destroy([error]) function should emit 'error' event if `error` is set. PR-URL: https://github.com/nodejs/node/pull/19735 Fixes: https://github.com/nodejs/node/issues/19727 Reviewed-By: Luigi Pinca Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Ruben Bridgewater --- lib/fs.js | 2 +- .../test-fs-stream-destroy-emit-error.js | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-fs-stream-destroy-emit-error.js diff --git a/lib/fs.js b/lib/fs.js index f0a9b676b34..ebf70948192 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -2128,7 +2128,7 @@ ReadStream.prototype._destroy = function(err, cb) { return; } - closeFsStream(this, cb); + closeFsStream(this, cb, err); this.fd = null; }; diff --git a/test/parallel/test-fs-stream-destroy-emit-error.js b/test/parallel/test-fs-stream-destroy-emit-error.js new file mode 100644 index 00000000000..c0405ce5f15 --- /dev/null +++ b/test/parallel/test-fs-stream-destroy-emit-error.js @@ -0,0 +1,20 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs'); + +const tmpdir = require('../common/tmpdir'); +tmpdir.refresh(); + +test(fs.createReadStream(__filename)); +test(fs.createWriteStream(`${tmpdir.path}/dummy`)); + +function test(stream) { + const err = new Error('DESTROYED'); + stream.on('open', function() { + stream.destroy(err); + }); + stream.on('error', common.mustCall(function(err_) { + assert.strictEqual(err_, err); + })); +}