Stream.Writable reports wrong number in _writableState.bufferedRequestCount
- Version: v6.1.0
- Platform: Windows 10 64-bit
- Subsystem: Stream
Was casually reading _stream_writable.js and noticed that clearBuffer() mistakenly zeroes state.bufferedRequestCount at the end of the function in case when _writev is not implemented and _write is not synchronous. The while (entry) loop is breaken from, leaving data in the buffer, but the request counter is zeroed out anyway.
Here's the testing code
'use strict'; const Stream = require('stream'); class testWritable extends Stream.Writable { constructor() { super({objectMode: true}); } _write(chunk, encoding, cb) { console.log(`_writing chunk ${chunk}`); setTimeout(cb, 1000); } } const testStream = new testWritable(); testStream.cork(); for (let i = 1; i <= 5; ++i) { testStream.write(i, () => { console.log(`chunk ${i} cb called`); console.log(`_writableState.bufferedRequestCount = ${testStream._writableState.bufferedRequestCount}`); console.log(`real buffered request count = ${testStream._writableState.getBuffer().length}`); }); } testStream.end(); console.log('main program ends here');
And the output:
_writing chunk 1
main program ends here
_writing chunk 2
chunk 1 cb called
_writableState.bufferedRequestCount = 0
real buffered request count = 3
_writing chunk 3
chunk 2 cb called
_writableState.bufferedRequestCount = 0
real buffered request count = 2
_writing chunk 4
chunk 3 cb called
_writableState.bufferedRequestCount = 0
real buffered request count = 1
_writing chunk 5
chunk 4 cb called
_writableState.bufferedRequestCount = 0
real buffered request count = 0
chunk 5 cb called
_writableState.bufferedRequestCount = 0
real buffered request count = 0
The implications of this are super low, I understand, but you know, just in case.