From a31aa31b6bfa68063eb8254298a4e4e7d24ff5f6 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Wed, 17 Nov 2021 17:49:41 +0300 Subject: [PATCH] [Perf] GramJs: Fix memory leaks (#1546) --- src/lib/gramjs/extensions/MessagePacker.js | 7 +++---- src/lib/gramjs/network/MTProtoSender.js | 3 +++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lib/gramjs/extensions/MessagePacker.js b/src/lib/gramjs/extensions/MessagePacker.js index 9c44555d7..e3bbd8b03 100644 --- a/src/lib/gramjs/extensions/MessagePacker.js +++ b/src/lib/gramjs/extensions/MessagePacker.js @@ -1,6 +1,6 @@ const MessageContainer = require('../tl/core/MessageContainer'); const TLMessage = require('../tl/core/TLMessage'); -const BinaryWriter = require('../extensions/BinaryWriter'); +const BinaryWriter = require('./BinaryWriter'); const USE_INVOKE_AFTER_WITH = [ 'messages.SendMessage', 'messages.SendMedia', 'messages.SendMultiMedia', @@ -35,11 +35,10 @@ class MessagePacker { } } - this._queue.push(state); this.setReady(true); - - if (state) { + // 1658238041=MsgsAck, we don't care about MsgsAck here because they never resolve anyway. + if (state && state.request.CONSTRUCTOR_ID !== 1658238041) { this._pendingStates.push(state); state.promise // Using finally causes triggering `unhandledrejection` event diff --git a/src/lib/gramjs/network/MTProtoSender.js b/src/lib/gramjs/network/MTProtoSender.js index 6dc1f5a72..809ff639f 100644 --- a/src/lib/gramjs/network/MTProtoSender.js +++ b/src/lib/gramjs/network/MTProtoSender.js @@ -338,6 +338,9 @@ class MTProtoSender { const ack = new RequestState(new MsgsAck({ msgIds: Array(...this._pending_ack) })); this._send_queue.append(ack); this._last_acks.push(ack); + if (this._last_acks.length >= 10) { + this._last_acks.shift(); + } this._pending_ack.clear(); } this._log.debug(`Waiting for messages to send...${this._reconnecting}`);