Writable is destroyed before calling callback in rare case
Version
v16.10.0
Platform
Linux solus 5.14.7-198.current #1 SMP PREEMPT Wed Sep 22 16:02:46 UTC 2021 x86_64 GNU/Linux
Subsystem
stream
What steps will reproduce the bug?
const {Writable} = require('stream');
class X extends Writable {
async _destroy(error, callback) {
(async () => {
await new Promise(resolve => setTimeout(resolve, 10));
console.log(w._writableState.closed);
callback(error);
})();
}
}
const w = new X();
w.once('error', error => {
console.log(error);
});
w.destroy(new Error('oh no!'));
How often does it reproduce? Is there a required condition?
Always.
What is the expected behavior?
false
Error: oh no!
What do you see instead?
true
Additional information
Some undocumented behavior here: