Skip to content

Commit 0a73b4d

Browse files
staltzkwonoj
authored andcommitted
perf(ReplaySubject): fix memory leak of growing buffer
Fix ReplaySubject to attempt to trim its own buffer of events whenever a new event is fed through next(). Resolves issue #578.
1 parent 280f7ed commit 0a73b4d

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

src/subjects/ReplaySubject.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ export class ReplaySubject<T> extends Subject<T> {
2222
_next(value: T): void {
2323
const now = this._getNow();
2424
this.events.push(new ReplayEvent(now, value));
25+
this._trimBufferThenGetEvents(now);
2526
super._next(value);
2627
}
2728

2829
_subscribe(subscriber: Subscriber<any>): Subscription<T> {
29-
const events = this._getEvents(this._getNow());
30+
const events = this._trimBufferThenGetEvents(this._getNow());
3031
let index = -1;
3132
const len = events.length;
3233
while (!subscriber.isUnsubscribed && ++index < len) {
@@ -39,7 +40,7 @@ export class ReplaySubject<T> extends Subject<T> {
3940
return (this.scheduler || immediate).now();
4041
}
4142

42-
private _getEvents(now): ReplayEvent<T>[] {
43+
private _trimBufferThenGetEvents(now): ReplayEvent<T>[] {
4344
const bufferSize = this.bufferSize;
4445
const _windowTime = this._windowTime;
4546
const events = this.events;

0 commit comments

Comments
 (0)