◐ Shell
clean mode source ↗

stream: noop pause/resume on destroyed streams · nodejs/node@29b1966

Original file line numberDiff line numberDiff line change

@@ -1233,6 +1233,9 @@ function nReadingNextTick(self) {

12331233

// If the user uses them, then switch into old mode.

12341234

Readable.prototype.resume = function() {

12351235

const state = this._readableState;

1236+

if ((state[kState] & kDestroyed) !== 0) {

1237+

return this;

1238+

}

12361239

if ((state[kState] & kFlowing) === 0) {

12371240

debug('resume');

12381241

// We flow only if there is no one listening

@@ -1273,6 +1276,9 @@ function resume_(stream, state) {

12731276
12741277

Readable.prototype.pause = function() {

12751278

const state = this._readableState;

1279+

if ((state[kState] & kDestroyed) !== 0) {

1280+

return this;

1281+

}

12761282

debug('call pause');

12771283

if ((state[kState] & (kHasFlowing | kFlowing)) !== kHasFlowing) {

12781284

debug('pause');

Original file line numberDiff line numberDiff line change

@@ -118,3 +118,13 @@ const http = require('http');

118118

req.end('asd');

119119

}));

120120

}

121+
122+

{

123+

// resume() and pause() should be no-ops on destroyed streams.

124+

const r = new Readable({ read() {} });

125+

r.destroy();

126+

r.on('resume', common.mustNotCall());

127+

r.on('pause', common.mustNotCall());

128+

r.resume();

129+

r.pause();

130+

}