GeezerVison is showing github.com — stream: forward errored to callback · nodejs/node@efd40ea
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: lib/internal/streams/writable.js +2-2Lines changed: 2 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -515,12 +515,12 @@ function errorBuffer(state) { | 515 | 515 | const { chunk, callback } = state.buffered[n]; | 516 | 516 | const len = state.objectMode ? 1 : chunk.length; | 517 | 517 | state.length -= len; | 518 | | - callback(new ERR_STREAM_DESTROYED('write')); | | 518 | + callback(state.errored ?? new ERR_STREAM_DESTROYED('write')); | 519 | 519 | } | 520 | 520 |
| 521 | 521 | const onfinishCallbacks = state[kOnFinished].splice(0); | 522 | 522 | for (let i = 0; i < onfinishCallbacks.length; i++) { | 523 | | - onfinishCallbacks[i](new ERR_STREAM_DESTROYED('end')); | | 523 | + onfinishCallbacks[i](state.errored ?? new ERR_STREAM_DESTROYED('end')); | 524 | 524 | } | 525 | 525 |
| 526 | 526 | resetBuffer(state); | |
Collapse file Copy file name to clipboardExpand all lines: test/parallel/test-stream-writable-destroy.js +24-6Lines changed: 24 additions & 6 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -351,33 +351,35 @@ const assert = require('assert'); | 351 | 351 | const write = new Writable({ | 352 | 352 | write(chunk, enc, cb) { process.nextTick(cb); } | 353 | 353 | }); | | 354 | + const _err = new Error('asd'); | 354 | 355 | write.once('error', common.mustCall((err) => { | 355 | 356 | assert.strictEqual(err.message, 'asd'); | 356 | 357 | })); | 357 | 358 | write.end('asd', common.mustCall((err) => { | 358 | | - assert.strictEqual(err.code, 'ERR_STREAM_DESTROYED'); | | 359 | + assert.strictEqual(err, _err); | 359 | 360 | })); | 360 | | - write.destroy(new Error('asd')); | | 361 | + write.destroy(_err); | 361 | 362 | } | 362 | 363 |
| 363 | 364 | { | 364 | 365 | // Call buffered write callback with error | 365 | 366 |
| | 367 | + const _err = new Error('asd'); | 366 | 368 | const write = new Writable({ | 367 | 369 | write(chunk, enc, cb) { | 368 | | - process.nextTick(cb, new Error('asd')); | | 370 | + process.nextTick(cb, _err); | 369 | 371 | }, | 370 | 372 | autoDestroy: false | 371 | 373 | }); | 372 | 374 | write.cork(); | 373 | 375 | write.write('asd', common.mustCall((err) => { | 374 | | - assert.strictEqual(err.message, 'asd'); | | 376 | + assert.strictEqual(err, _err); | 375 | 377 | })); | 376 | 378 | write.write('asd', common.mustCall((err) => { | 377 | | - assert.strictEqual(err.code, 'ERR_STREAM_DESTROYED'); | | 379 | + assert.strictEqual(err, _err); | 378 | 380 | })); | 379 | 381 | write.on('error', common.mustCall((err) => { | 380 | | - assert.strictEqual(err.message, 'asd'); | | 382 | + assert.strictEqual(err, _err); | 381 | 383 | })); | 382 | 384 | write.uncork(); | 383 | 385 | } | @@ -471,3 +473,19 @@ const assert = require('assert'); | 471 | 473 | write.destroy(); | 472 | 474 | write.destroy(); | 473 | 475 | } | | 476 | + | | 477 | +{ | | 478 | + // https://github.com/nodejs/node/issues/39356 | | 479 | + const s = new Writable({ | | 480 | + final() {} | | 481 | + }); | | 482 | + const _err = new Error('oh no'); | | 483 | + // Remove `callback` and it works | | 484 | + s.end(common.mustCall((err) => { | | 485 | + assert.strictEqual(err, _err); | | 486 | + })); | | 487 | + s.on('error', common.mustCall((err) => { | | 488 | + assert.strictEqual(err, _err); | | 489 | + })); | | 490 | + s.destroy(_err); | | 491 | +} |
Collapse file Copy file name to clipboardExpand all lines: test/parallel/test-stream-writable-end-cb-error.js +7-12Lines changed: 7 additions & 12 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -8,19 +8,20 @@ const stream = require('stream'); | 8 | 8 | // Invoke end callback on failure. | 9 | 9 | const writable = new stream.Writable(); | 10 | 10 |
| | 11 | + const _err = new Error('kaboom'); | 11 | 12 | writable._write = (chunk, encoding, cb) => { | 12 | | - process.nextTick(cb, new Error('kaboom')); | | 13 | + process.nextTick(cb, _err); | 13 | 14 | }; | 14 | 15 |
| 15 | 16 | writable.on('error', common.mustCall((err) => { | 16 | | - assert.strictEqual(err.message, 'kaboom'); | | 17 | + assert.strictEqual(err, _err); | 17 | 18 | })); | 18 | 19 | writable.write('asd'); | 19 | 20 | writable.end(common.mustCall((err) => { | 20 | | - assert.strictEqual(err.code, 'ERR_STREAM_DESTROYED'); | | 21 | + assert.strictEqual(err, _err); | 21 | 22 | })); | 22 | 23 | writable.end(common.mustCall((err) => { | 23 | | - assert.strictEqual(err.code, 'ERR_STREAM_DESTROYED'); | | 24 | + assert.strictEqual(err, _err); | 24 | 25 | })); | 25 | 26 | } | 26 | 27 |
| @@ -57,18 +58,12 @@ const stream = require('stream'); | 57 | 58 | } | 58 | 59 | }); | 59 | 60 | w.end('testing ended state', common.mustCall((err) => { | 60 | | - // This errors since .destroy(err), which is invoked by errors | 61 | | - // in same tick below, will error all pending callbacks. | 62 | | - // Does this make sense? Not sure. | 63 | | - assert.strictEqual(err.code, 'ERR_STREAM_DESTROYED'); | | 61 | + assert.strictEqual(err.code, 'ERR_STREAM_WRITE_AFTER_END'); | 64 | 62 | })); | 65 | 63 | assert.strictEqual(w.destroyed, false); | 66 | 64 | assert.strictEqual(w.writableEnded, true); | 67 | 65 | w.end(common.mustCall((err) => { | 68 | | - // This errors since .destroy(err), which is invoked by errors | 69 | | - // in same tick below, will error all pending callbacks. | 70 | | - // Does this make sense? Not sure. | 71 | | - assert.strictEqual(err.code, 'ERR_STREAM_DESTROYED'); | | 66 | + assert.strictEqual(err.code, 'ERR_STREAM_WRITE_AFTER_END'); | 72 | 67 | })); | 73 | 68 | assert.strictEqual(w.destroyed, false); | 74 | 69 | assert.strictEqual(w.writableEnded, true); | |
Collapse file Copy file name to clipboardExpand all lines: test/parallel/test-stream-writable-end-cb-uncaught.js +3-2Lines changed: 3 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -9,15 +9,16 @@ process.on('uncaughtException', common.mustCall((err) => { | 9 | 9 | })); | 10 | 10 |
| 11 | 11 | const writable = new stream.Writable(); | | 12 | +const _err = new Error('kaboom'); | 12 | 13 |
| 13 | 14 | writable._write = (chunk, encoding, cb) => { | 14 | 15 | cb(); | 15 | 16 | }; | 16 | 17 | writable._final = (cb) => { | 17 | | - cb(new Error('kaboom')); | | 18 | + cb(_err); | 18 | 19 | }; | 19 | 20 |
| 20 | 21 | writable.write('asd'); | 21 | 22 | writable.end(common.mustCall((err) => { | 22 | | - assert.strictEqual(err.code, 'ERR_STREAM_DESTROYED'); | | 23 | + assert.strictEqual(err, _err); | 23 | 24 | })); |
|