diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.cpp b/Telegram/SourceFiles/mtproto/mtp_instance.cpp index 76c5cb623..ee1095837 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.cpp +++ b/Telegram/SourceFiles/mtproto/mtp_instance.cpp @@ -1020,12 +1020,25 @@ void Instance::Private::sendRequest( const auto signedDcId = toMainDc ? -realShiftedDcId : realShiftedDcId; registerRequest(requestId, signedDcId); - if (afterRequestId) { - request->after = getRequest(afterRequestId); - } request->lastSentTime = crl::now(); request->needsLayer = needsLayer; + if (afterRequestId) { + request->after = getRequest(afterRequestId); + + if (request->after) { + // Check if this after request is waiting in _dependentRequests. + // This happens if it was after some other request and failed + // to wait for it, but that other request is still processed. + QMutexLocker locker(&_dependentRequestsLock); + const auto i = _dependentRequests.find(afterRequestId); + if (i != end(_dependentRequests)) { + _dependentRequests.emplace(requestId, afterRequestId); + return; + } + } + } + session->sendPrepared(request, msCanWait); }