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

Ashod Nakashian ashod.nakashian at collabora.co.uk
Mon Jan 2 06:15:11 UTC 2017


 wsd/DocumentBroker.cpp |    2 +-
 wsd/DocumentBroker.hpp |    8 ++++++--
 wsd/LOOLWSD.cpp        |   10 ++++++----
 3 files changed, 13 insertions(+), 7 deletions(-)

New commits:
commit 65d2036d63fa9304b1c8a88f18f946ba02bb1001
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sun Jan 1 18:16:56 2017 -0500

    wsd: use chrono instead of time_t
    
    While time_t is much simpler, it's too
    opaque. The new chrono library is type-safe
    and does conversion correctly, as well as
    guarantees monotonity and other desirable
    properties.
    
    Change-Id: Id41c44c397a31d73e894e8f1715ff18f2b67df53
    Reviewed-on: https://gerrit.libreoffice.org/32627
    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 af13b73..dd15f06 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -1089,7 +1089,7 @@ void DocumentBroker::closeDocument(const std::string& reason)
 
 void DocumentBroker::updateLastActivityTime()
 {
-    _lastActivity = std::time(nullptr);
+    _lastActivity = std::chrono::steady_clock::now();
     Admin::instance().updateLastActivityTime(_docKey);
 }
 
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index d913adc..54eb3be 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -301,7 +301,11 @@ public:
 
     void updateLastActivityTime();
 
-    std::time_t getIdleTime() const { return std::time(nullptr) - _lastActivity; }
+    std::size_t getIdleTimeSecs() const
+    {
+        const auto duration = (std::chrono::steady_clock::now() - _lastActivity);
+        return std::chrono::duration_cast<std::chrono::seconds>(duration).count();
+    }
 
 private:
     /// Sends the .uno:Save command to LoKit.
@@ -346,7 +350,7 @@ private:
 
     int _debugRenderedTileCount;
 
-    std::time_t _lastActivity;
+    std::chrono::steady_clock::time_point _lastActivity;
 
     static constexpr auto IdleSaveDurationMs = 30 * 1000;
     static constexpr auto AutoSaveDurationMs = 300 * 1000;
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 3a07668..0268407 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -274,7 +274,7 @@ bool cleanupDocBrokers()
         auto lock = docBroker->getLock();
 
         // Remove idle documents after 1 hour.
-        const bool idle = (docBroker->getIdleTime() >= 3600);
+        const bool idle = (docBroker->getIdleTimeSecs() >= 3600);
 
         // Cleanup used and dead entries.
         if (docBroker->isLoaded() &&
@@ -2086,11 +2086,12 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
     LOG_INF("Starting master server listening on " << ClientPortNumber);
     srv.start();
 
+
 #if ENABLE_DEBUG
     time_t startTimeSpan = time(nullptr);
 #endif
 
-    time_t last30SecCheck = time(nullptr);
+    auto last30SecCheckTime = std::chrono::steady_clock::now();
     int status = 0;
     while (!TerminationFlag && !SigUtil::isShuttingDown())
     {
@@ -2173,7 +2174,8 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
                 // Nothing more to do this round.
             }
             else if (!std::getenv("LOOL_NO_AUTOSAVE") &&
-                     (time(nullptr) >= last30SecCheck + 30))
+                     std::chrono::duration_cast<std::chrono::seconds>
+                        (std::chrono::steady_clock::now() - last30SecCheckTime).count() >= 30)
             {
                 try
                 {
@@ -2190,7 +2192,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
                     LOG_ERR("Exception: " << exc.what());
                 }
 
-                last30SecCheck = time(nullptr);
+                last30SecCheckTime = std::chrono::steady_clock::now();
             }
             else
             {


More information about the Libreoffice-commits mailing list