wsd/ClientSession.cpp | 10 ++++------ wsd/DocumentBroker.cpp | 10 ++++++++-- 2 files changed, 12 insertions(+), 8 deletions(-)
New commits: commit 6fe933b46678f3bf52a63f51890ac4c900989d3b Author: Ashod Nakashian <[email protected]> Date: Wed Jan 25 20:55:39 2017 -0500 wsd: take lock to forward messages to clients Change-Id: I15888e4a5c35511c21f1e2d2bdd25ecbb16e80b9 Reviewed-on: https://gerrit.libreoffice.org/33568 Reviewed-by: Ashod Nakashian <[email protected]> Tested-by: Ashod Nakashian <[email protected]> diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp index 742bb07..63db162 100644 --- a/wsd/ClientSession.cpp +++ b/wsd/ClientSession.cpp @@ -583,13 +583,10 @@ bool ClientSession::handleKitToClientMessage(const char* buffer, const int lengt } else if (tokens.size() == 2 && tokens[0] == "statechanged:") { - if (docBroker) + StringTokenizer stateTokens(tokens[1], "=", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); + if (stateTokens.count() == 2 && stateTokens[0] == ".uno:ModifiedStatus") { - StringTokenizer stateTokens(tokens[1], "=", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); - if (stateTokens.count() == 2 && stateTokens[0] == ".uno:ModifiedStatus") - { - docBroker->setModified(stateTokens[1] == "true"); - } + docBroker->setModified(stateTokens[1] == "true"); } } @@ -652,6 +649,7 @@ bool ClientSession::handleKitToClientMessage(const char* buffer, const int lengt stringToInteger(firstLineTokens[3], w); stringToInteger(firstLineTokens[4], h); } + docBroker->invalidateCursor(x, y, w, h); } else diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index 7b3ee4c..91f3ce4 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -759,8 +759,6 @@ bool DocumentBroker::handleInput(const std::vector<char>& payload) void DocumentBroker::invalidateTiles(const std::string& tiles) { - std::unique_lock<std::mutex> lock(_mutex); - // Remove from cache. _tileCache->invalidateTiles(tiles); } @@ -904,6 +902,9 @@ void DocumentBroker::handleTileResponse(const std::vector<char>& payload) const auto tile = TileDesc::parse(firstLine); const auto buffer = payload.data(); const auto offset = firstLine.size() + 1; + + std::unique_lock<std::mutex> lock(_mutex); + tileCache().saveTileAndNotify(tile, buffer + offset, length - offset); } else @@ -931,6 +932,9 @@ void DocumentBroker::handleTileCombinedResponse(const std::vector<char>& payload const auto tileCombined = TileCombined::parse(firstLine); const auto buffer = payload.data(); auto offset = firstLine.size() + 1; + + std::unique_lock<std::mutex> lock(_mutex); + for (const auto& tile : tileCombined.getTiles()) { tileCache().saveTileAndNotify(tile, buffer + offset, tile.getImgSize()); @@ -1015,6 +1019,8 @@ bool DocumentBroker::forwardToClient(const std::shared_ptr<Message>& payload) std::string sid; if (LOOLProtocol::parseNameValuePair(payload->forwardToken(), name, sid, '-') && name == "client") { + std::unique_lock<std::mutex> lock(_mutex); + const auto it = _sessions.find(sid); if (it != _sessions.end()) { _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
