Skip to content

Commit 54755f2

Browse files
committed
fixuP
1 parent 321c41c commit 54755f2

File tree

4 files changed

+25
-4
lines changed

4 files changed

+25
-4
lines changed

lib/events.js

+19-4
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const {
3737
ObjectDefineProperty,
3838
ObjectDefineProperties,
3939
ObjectGetPrototypeOf,
40+
ObjectKeys,
4041
ObjectSetPrototypeOf,
4142
Promise,
4243
PromiseReject,
@@ -87,6 +88,7 @@ const {
8788

8889
const kCapture = Symbol('kCapture');
8990
const kErrorMonitor = Symbol('events.errorMonitor');
91+
const kShapeMode = Symbol('shapeMode');
9092
const kMaxEventTargetListeners = Symbol('events.maxEventTargetListeners');
9193
const kMaxEventTargetListenersWarned =
9294
Symbol('events.maxEventTargetListenersWarned');
@@ -344,6 +346,9 @@ EventEmitter.init = function(opts) {
344346
this._events === ObjectGetPrototypeOf(this)._events) {
345347
this._events = { __proto__: null };
346348
this._eventsCount = 0;
349+
this[kShapeMode] = false;
350+
} else {
351+
this[kShapeMode] = true;
347352
}
348353

349354
this._maxListeners = this._maxListeners || undefined;
@@ -686,10 +691,18 @@ EventEmitter.prototype.removeListener =
686691
return this;
687692

688693
if (list === listener || list.listener === listener) {
689-
if (--this._eventsCount === 0)
690-
this._events = { __proto__: null };
691-
else {
692-
delete events[type];
694+
if (--this._eventsCount === 0) {
695+
if (this[kShapeMode]) {
696+
events[type] = undefined;
697+
} else {
698+
this._events = { __proto__: null };
699+
}
700+
} else {
701+
if (this[kShapeMode]) {
702+
events[type] = undefined;
703+
} else {
704+
delete events[type];
705+
}
693706
if (events.removeListener)
694707
this.emit('removeListener', type, list.listener || listener);
695708
}
@@ -750,6 +763,7 @@ EventEmitter.prototype.removeAllListeners =
750763
else
751764
delete events[type];
752765
}
766+
this[kShapeMode] = false;
753767
return this;
754768
}
755769

@@ -762,6 +776,7 @@ EventEmitter.prototype.removeAllListeners =
762776
this.removeAllListeners('removeListener');
763777
this._events = { __proto__: null };
764778
this._eventsCount = 0;
779+
this[kShapeMode] = false;
765780
return this;
766781
}
767782

lib/internal/streams/duplex.js

+2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ function Duplex(options) {
7676
readable: undefined,
7777
pipe: undefined,
7878
unpipe: undefined,
79+
[destroyImpl.kConstruct]: undefined,
80+
[destroyImpl.kDestroy]: undefined,
7981
};
8082

8183
this._readableState = new Readable.ReadableState(options, this, true);

lib/internal/streams/readable.js

+2
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,8 @@ function Readable(options) {
326326
readable: undefined,
327327
pipe: undefined,
328328
unpipe: undefined,
329+
[destroyImpl.kConstruct]: undefined,
330+
[destroyImpl.kDestroy]: undefined,
329331
};
330332

331333
this._readableState = new ReadableState(options, this, false);

lib/internal/streams/writable.js

+2
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,8 @@ function Writable(options) {
388388
prefinish: undefined,
389389
finish: undefined,
390390
drain: undefined,
391+
[destroyImpl.kConstruct]: undefined,
392+
[destroyImpl.kDestroy]: undefined,
391393
};
392394

393395
this._writableState = new WritableState(options, this, false);

0 commit comments

Comments
 (0)