loolwsd/DocumentBroker.cpp |   29 ++++++++++-------------------
 loolwsd/TileCache.cpp      |    8 ++++----
 2 files changed, 14 insertions(+), 23 deletions(-)

New commits:
commit c8eb2ba6127f9d3da56811c25860c89ce085f588
Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk>
Date:   Sun Oct 30 15:24:27 2016 -0400

    loolwsd: cleanup tile response handling
    
    Change-Id: I34b76b463c05e3479d1fd1516906c9a75282c753
    Reviewed-on: https://gerrit.libreoffice.org/30419
    Reviewed-by: Ashod Nakashian <ashnak...@gmail.com>
    Tested-by: Ashod Nakashian <ashnak...@gmail.com>

diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
index 185d610..7516cc5 100644
--- a/loolwsd/DocumentBroker.cpp
+++ b/loolwsd/DocumentBroker.cpp
@@ -740,29 +740,27 @@ void DocumentBroker::cancelTileRequests(const 
std::shared_ptr<ClientSession>& se
 void DocumentBroker::handleTileResponse(const std::vector<char>& payload)
 {
     const std::string firstLine = getFirstLine(payload);
+    Log::debug("Handling tile combined: " + firstLine);
+
     try
     {
-        auto tile = TileDesc::parse(firstLine);
-        const auto buffer = payload.data();
         const auto length = payload.size();
-
         if (firstLine.size() < static_cast<std::string::size_type>(length) - 1)
         {
+            const auto tile = TileDesc::parse(firstLine);
+            const auto buffer = payload.data();
             const auto offset = firstLine.size() + 1;
             tileCache().saveTileAndNotify(tile, buffer + offset, length - 
offset);
         }
         else
         {
             Log::debug() << "Render request declined for " << firstLine << 
Log::end;
-            std::unique_lock<std::mutex> 
tileBeingRenderedLock(tileCache().getTilesBeingRenderedLock());
-            tileCache().forgetTileBeingRendered(tile);
+            // They will get re-issued if we don't forget them.
         }
     }
     catch (const std::exception& exc)
     {
         Log::error("Failed to process tile response [" + firstLine + "]: " + 
exc.what() + ".");
-        //FIXME: Return error.
-        //sendTextFrame("error: cmd=tile kind=syntax");
     }
 }
 
@@ -773,13 +771,12 @@ void DocumentBroker::handleTileCombinedResponse(const 
std::vector<char>& payload
 
     try
     {
-        auto tileCombined = TileCombined::parse(firstLine);
-        const auto buffer = payload.data();
         const auto length = payload.size();
-        auto offset = firstLine.size() + 1;
-
         if (firstLine.size() < static_cast<std::string::size_type>(length) - 1)
         {
+            const auto tileCombined = TileCombined::parse(firstLine);
+            const auto buffer = payload.data();
+            auto offset = firstLine.size() + 1;
             for (const auto& tile : tileCombined.getTiles())
             {
                 tileCache().saveTileAndNotify(tile, buffer + offset, 
tile.getImgSize());
@@ -788,19 +785,13 @@ void DocumentBroker::handleTileCombinedResponse(const 
std::vector<char>& payload
         }
         else
         {
-            Log::error() << "Render request failed for " << firstLine << 
Log::end;
-            std::unique_lock<std::mutex> 
tileBeingRenderedLock(tileCache().getTilesBeingRenderedLock());
-            for (const auto& tile : tileCombined.getTiles())
-            {
-                tileCache().forgetTileBeingRendered(tile);
-            }
+            Log::error() << "Render request declined for " << firstLine << 
Log::end;
+            // They will get re-issued if we don't forget them.
         }
     }
     catch (const std::exception& exc)
     {
         Log::error("Failed to process tile response [" + firstLine + "]: " + 
exc.what() + ".");
-        //FIXME: Return error.
-        //sendTextFrame("error: cmd=tile kind=syntax");
     }
 }
 
diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp
index e8ebdd1..d26db3b 100644
--- a/loolwsd/TileCache.cpp
+++ b/loolwsd/TileCache.cpp
@@ -444,14 +444,14 @@ void TileCache::subscribeToTileRendering(const TileDesc& 
tile, const std::shared
 {
     assert(subscriber->getKind() == LOOLSession::Kind::ToClient);
 
-    std::unique_lock<std::mutex> lock(_tilesBeingRenderedMutex);
-
-    std::shared_ptr<TileBeingRendered> tileBeingRendered = 
findTileBeingRendered(tile);
-
     std::ostringstream oss;
     oss << '(' << tile.getPart() << ',' << tile.getTilePosX() << ',' << 
tile.getTilePosY() << ')';
     const auto name = oss.str();
 
+    std::unique_lock<std::mutex> lock(_tilesBeingRenderedMutex);
+
+    std::shared_ptr<TileBeingRendered> tileBeingRendered = 
findTileBeingRendered(tile);
+
     if (tileBeingRendered)
     {
         for (const auto &s : tileBeingRendered->_subscribers)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to