[Libreoffice-commits] online.git: wsd/DocumentBroker.cpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Tue Mar 28 05:12:54 UTC 2017


 wsd/DocumentBroker.cpp |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

New commits:
commit 06249045006c438e41ec7037778fcc57017735ec
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Mon Mar 27 20:50:30 2017 -0400

    wsd: flush sockets using timed loops
    
    Change-Id: If6cc6194aa36a770913b777a8f19617fea6ba4a7
    Reviewed-on: https://gerrit.libreoffice.org/35786
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 97b81fdd..384e66cf 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -248,8 +248,17 @@ void DocumentBroker::pollThread()
     }
 
     // Flush socket data.
-    for (int i = 0; i < 7 && _poll->getSocketCount() > 0; ++i)
-        _poll->poll(POLL_TIMEOUT_MS / 5);
+    const int flushTimeoutMs = POLL_TIMEOUT_MS * 2; // ~1000ms
+    const auto flushStartTime = std::chrono::steady_clock::now();
+    while (_poll->getSocketCount())
+    {
+        const auto now = std::chrono::steady_clock::now();
+        const int elapsedMs = std::chrono::duration_cast<std::chrono::milliseconds>(now - flushStartTime).count();
+        if (elapsedMs > flushTimeoutMs)
+            break;
+
+        _poll->poll(std::min(flushTimeoutMs - elapsedMs, POLL_TIMEOUT_MS / 5));
+    }
 
     // Terminate properly while we can.
     auto lock = getLock();


More information about the Libreoffice-commits mailing list