wsd/LOOLWSD.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
New commits: commit 759564368d9dbd24bf1ad65ebfb52f080aa81e38 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Fri Dec 23 22:43:38 2016 -0500 wsd: reorganize DocBrokers lookup Avoid unnecessary code under lock or when DocBrokers is updated, which requires removal on exception. Change-Id: Id01aed42cd66616b910b7e16a8a1ed6c1d1e74b9 Reviewed-on: https://gerrit.libreoffice.org/32558 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 8a031df..5575907 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -787,27 +787,36 @@ private: LOG_INF("Sanitized url [" << uri << "] to [" << uriPublic.toString() << "] and mapped to docKey [" << docKey << "]."); - std::shared_ptr<DocumentBroker> docBroker; + // Check if readonly session is required + bool isReadOnly = false; + for (const auto& param : uriPublic.getQueryParameters()) + { + LOG_DBG("Query param: " << param.first << ", value: " << param.second); + if (param.first == "permission" && param.second == "readonly") + { + isReadOnly = true; + } + } std::unique_lock<std::mutex> docBrokersLock(DocBrokersMutex); + cleanupDocBrokers(); + if (TerminationFlag) { LOG_ERR("Termination flag set. No loading new session [" << id << "]"); return; } - cleanupDocBrokers(); + std::shared_ptr<DocumentBroker> docBroker; // Lookup this document. auto it = DocBrokers.find(docKey); - if (it != DocBrokers.end()) + if (it != DocBrokers.end() && it->second) { // Get the DocumentBroker from the Cache. LOG_DBG("Found DocumentBroker with docKey [" << docKey << "]."); docBroker = it->second; - assert(docBroker); - if (docBroker->isMarkedToDestroy()) { // Let the waiting happen in parallel to new requests. @@ -916,15 +925,6 @@ private: docBrokersLock.unlock(); - // Check if readonly session is required - bool isReadOnly = false; - for (const auto& param : uriPublic.getQueryParameters()) - { - LOG_DBG("Query param: " << param.first << ", value: " << param.second); - if (param.first == "permission") - isReadOnly = param.second == "readonly"; - } - // In case of WOPI and if this session is not set as readonly, it might be set so // later after making a call to WOPI host which tells us the permission on files // (UserCanWrite param) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits