X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fidentserver.cpp;h=ea1295ef223e4c03f3b36fb7d371f9d16f2cd8e3;hp=6d23a6cacb2472d87fb60ff150cf913c61791ace;hb=4e6582c9640179cb195126d7f7ee363faf9fe42e;hpb=a5ee609b02cb8d7ebb43b0034a6d50838c426f0b diff --git a/src/core/identserver.cpp b/src/core/identserver.cpp index 6d23a6ca..ea1295ef 100644 --- a/src/core/identserver.cpp +++ b/src/core/identserver.cpp @@ -120,7 +120,7 @@ void IdentServer::respond() { responseUnavailable(request); } else if (responseAvailable(request)) { // success - } else if (hasSocketsBelowId(transactionId)) { + } else if (lowestSocketId() < transactionId) { _requestQueue.emplace_back(request); } else { responseUnavailable(request); @@ -182,10 +182,12 @@ qint64 IdentServer::addWaitingSocket() { return newSocketId; } -bool IdentServer::hasSocketsBelowId(qint64 id) { - return std::any_of(_waiting.begin(), _waiting.end(), [=](qint64 socketId) { - return socketId <= id; - }); +qint64 IdentServer::lowestSocketId() { + if (_waiting.empty()) { + return std::numeric_limits::max(); + } + + return _waiting.front(); } void IdentServer::removeWaitingSocket(qint64 socketId) { @@ -193,21 +195,15 @@ void IdentServer::removeWaitingSocket(qint64 socketId) { } void IdentServer::processWaiting(qint64 socketId) { - qint64 lowestSocketId = std::numeric_limits::max(); - for (qint64 id : _waiting) { - if (id < lowestSocketId) { - lowestSocketId = id; - } - } removeWaitingSocket(socketId); _requestQueue.remove_if([=](Request request) { - if (request.transactionId < lowestSocketId) { - responseUnavailable(request); + if (socketId < request.transactionId && responseAvailable(request)) { return true; - } else if (request.transactionId > socketId) { - return responseAvailable(request); - } else { + } else if (lowestSocketId() < request.transactionId) { return false; + } else { + responseUnavailable(request); + return true; } }); }