loolwsd/LOOLKit.cpp | 67 +++++++++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 37 deletions(-)
New commits: commit 631ae0f11fb863a2ba9bbcc279c83905af8bba96 Author: Pranav Kant <pran...@collabora.co.uk> Date: Sun Feb 7 22:08:48 2016 +0530 loolwsd: Get the first *live* connection Sometimes there are situations when `connection` map is filled with dead sessions. We don't want to deal with those dead ones. Change-Id: I00dda77c39b5adbba69421eace0be0159e02505c Reviewed-on: https://gerrit.libreoffice.org/22207 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index 3694d42..703e30b 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -496,48 +496,41 @@ private: static void KitCallback(int nType, const char* pPayload, void* pData) { Document* self = reinterpret_cast<Document*>(pData); + Log::trace() << "Callback " + << KitCallbackTypeToString(nType) + << " [" << pPayload << "]." << Log::end; + if (self) { std::unique_lock<std::recursive_mutex> lock(self->_mutex); - - // Ideally, there would be only one connection at this point of time - const auto& it = self->_connections.begin(); - - if (!it->second->isRunning()) - Log::error() << "Error: Connection died unexpectedly" << Log::end; - - auto session = it->second->getSession(); - auto sessionLock = session->getLock(); - - Log::trace() << "Callback [" << session->getViewId() << "] " - << KitCallbackTypeToString(nType) - << " [" << pPayload << "]." << Log::end; - - if (session->isDisconnected()) - { - Log::trace("Skipping callback on disconnected session " + session->getName()); - return; - } - else if (session->isInactive()) + for (auto& it: self->_connections) { - Log::trace("Skipping callback on inactive session " + session->getName()); - return; - } + if (it.second->isRunning()) + { + auto session = it.second->getSession(); + auto sessionLock = session->getLock(); - switch (nType) - { - case LOK_CALLBACK_STATUS_INDICATOR_START: - session->sendTextFrame("statusindicatorstart:"); - break; - case LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE: - session->sendTextFrame("statusindicatorsetvalue: " + std::string(pPayload)); - break; - case LOK_CALLBACK_STATUS_INDICATOR_FINISH: - session->sendTextFrame("statusindicatorfinish:"); - break; - case LOK_CALLBACK_DOCUMENT_PASSWORD: - case LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY: - session->setDocumentPassword(nType); + switch (nType) + { + case LOK_CALLBACK_STATUS_INDICATOR_START: + session->sendTextFrame("statusindicatorstart:"); + break; + case LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE: + session->sendTextFrame("statusindicatorsetvalue: " + std::string(pPayload)); + break; + case LOK_CALLBACK_STATUS_INDICATOR_FINISH: + session->sendTextFrame("statusindicatorfinish:"); + break; + case LOK_CALLBACK_DOCUMENT_PASSWORD: + case LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY: + session->setDocumentPassword(nType); + break; + } + } + + // Ideally, there would be only one *live* connection at this point of time + // So, just get the first running one and break out. + // TODO: Find a better way to find the correct connection. break; } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits