Skip to content

Commit 61da0ed

Browse files
committed
stream: fix memory usage regression in writable
Setting writecb and afterWriteTickInfo to null did not clear the value in the state object. Amends 35ec931 (stream: writable state bitmap). Fixes nodejs#52228.
1 parent a837886 commit 61da0ed

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

lib/internal/streams/writable.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,8 @@ ObjectDefineProperties(WritableState.prototype, {
252252
enumerable: false,
253253
get() { return (this[kState] & kWriteCb) !== 0 ? this[kWriteCbValue] : nop; },
254254
set(value) {
255+
this[kWriteCbValue] = value;
255256
if (value) {
256-
this[kWriteCbValue] = value;
257257
this[kState] |= kWriteCb;
258258
} else {
259259
this[kState] &= ~kWriteCb;
@@ -268,8 +268,8 @@ ObjectDefineProperties(WritableState.prototype, {
268268
enumerable: false,
269269
get() { return (this[kState] & kAfterWriteTickInfo) !== 0 ? this[kAfterWriteTickInfoValue] : null; },
270270
set(value) {
271+
this[kAfterWriteTickInfoValue] = value;
271272
if (value) {
272-
this[kAfterWriteTickInfoValue] = value;
273273
this[kState] |= kAfterWriteTickInfo;
274274
} else {
275275
this[kState] &= ~kAfterWriteTickInfo;
@@ -615,7 +615,8 @@ function onwrite(stream, er) {
615615
const sync = (state[kState] & kSync) !== 0;
616616
const cb = (state[kState] & kWriteCb) !== 0 ? state[kWriteCbValue] : nop;
617617

618-
state[kState] &= ~(kWriting | kExpectWriteCb | kWriteCb);
618+
state.writecb = null;
619+
state[kState] &= ~(kWriting | kExpectWriteCb);
619620
state.length -= state.writelen;
620621
state.writelen = 0;
621622

0 commit comments

Comments
 (0)