From d56ec6c1f2cb561eed126cb11e9c8277e4e8c3b6 Mon Sep 17 00:00:00 2001 From: overtake <> Date: Tue, 14 Jan 2020 16:25:56 +0400 Subject: [PATCH] mtproto memory leak bug fix [skip ci] --- submodules/MtProtoKit/MTProtoKit/MTContext.m | 2 +- submodules/MtProtoKit/MTProtoKit/MTProto.m | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/submodules/MtProtoKit/MTProtoKit/MTContext.m b/submodules/MtProtoKit/MTProtoKit/MTContext.m index e38d403363..6abb56c6a0 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTContext.m +++ b/submodules/MtProtoKit/MTProtoKit/MTContext.m @@ -1394,7 +1394,7 @@ static int32_t fixedTimeDifferenceValue = 0; NSArray *currentListeners = [[NSArray alloc] initWithArray:strongSelf->_changeListeners]; for (id listener in currentListeners) { if ([listener respondsToSelector:@selector(contextLoggedOut:)]) - [listener contextLoggedOut:self]; + [listener contextLoggedOut:strongSelf]; } } }]; diff --git a/submodules/MtProtoKit/MTProtoKit/MTProto.m b/submodules/MtProtoKit/MTProtoKit/MTProto.m index 67d8160f7d..6b4f2ce316 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTProto.m +++ b/submodules/MtProtoKit/MTProtoKit/MTProto.m @@ -235,7 +235,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64; if ((_mtState & MTProtoStateStopped) == 0) { [self setMtState:_mtState | MTProtoStateStopped]; - + [_context removeChangeListener:self]; if (_transport != nil) { _transport.delegate = nil; @@ -2098,6 +2098,9 @@ static NSString *dumpHexString(NSData *data, int maxLength) { int64_t dataMessageId = 0; bool parseError = false; NSArray *parsedMessages = [self _parseIncomingMessages:decryptedData dataMessageId:&dataMessageId parseError:&parseError]; + + + for (MTIncomingMessage *message in parsedMessages) { if ([message.body isKindOfClass:[MTRpcResultMessage class]]) { MTRpcResultMessage *rpcResultMessage = message.body; @@ -2111,7 +2114,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) { MTShortLog(@"[MTProto#%p@%p received AUTH_KEY_PERM_EMPTY]", self, _context); [self handleMissingKey:scheme.address]; [self requestSecureTransportReset]; - + return; } }