[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-3' - common/FileUtil.cpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Tue May 29 14:57:38 UTC 2018


 common/FileUtil.cpp |   29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

New commits:
commit 13b40cd3bc4a04c567b6f9b2f2578bdc9c261422
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Fri Feb 23 19:14:49 2018 -0500

    wsd: reduce lock scope and log diskspace checks
    
    Change-Id: If093670ae83de5596a86a116ba6224aa0badbcbe
    Reviewed-on: https://gerrit.libreoffice.org/52678
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/common/FileUtil.cpp b/common/FileUtil.cpp
index af6dfef57..e6175311e 100644
--- a/common/FileUtil.cpp
+++ b/common/FileUtil.cpp
@@ -188,14 +188,14 @@ namespace FileUtil
 {
     void registerFileSystemForDiskSpaceChecks(const std::string& path)
     {
-        std::lock_guard<std::mutex> lock(fsmutex);
-
-        if (!path.empty())
+        const std::string::size_type lastSlash = path.rfind('/');
+        assert(path.empty() || lastSlash != std::string::npos);
+        if (lastSlash != std::string::npos)
         {
-            std::string dirPath = path;
-            std::string::size_type lastSlash = dirPath.rfind('/');
-            assert(lastSlash != std::string::npos);
-            dirPath = dirPath.substr(0, lastSlash + 1) + '.';
+            const std::string dirPath = path.substr(0, lastSlash + 1) + '.';
+            LOG_INF("Registering filesystem for space checks: [" << dirPath << "]");
+
+            std::lock_guard<std::mutex> lock(fsmutex);
 
             struct stat s;
             if (stat(dirPath.c_str(), &s) == 0)
@@ -207,19 +207,19 @@ namespace FileUtil
 
     std::string checkDiskSpaceOnRegisteredFileSystems(const bool cacheLastCheck)
     {
-        std::lock_guard<std::mutex> lock(fsmutex);
-
         static std::chrono::steady_clock::time_point lastCheck;
         std::chrono::steady_clock::time_point now(std::chrono::steady_clock::now());
 
-        // Don't check more often that once a minute
+        std::lock_guard<std::mutex> lock(fsmutex);
+
+        // Don't check more often than once a minute
         if (std::chrono::duration_cast<std::chrono::seconds>(now - lastCheck).count() < 60)
             return std::string();
 
         if (cacheLastCheck)
             lastCheck = now;
 
-        for (auto& i: filesystems)
+        for (const auto& i: filesystems)
         {
             if (!checkDiskSpace(i.path))
             {
@@ -242,10 +242,15 @@ namespace FileUtil
         if (statfs(path.c_str(), &sfs) == -1)
             return true;
 
+        const int64_t freeBytes = static_cast<int64_t>(sfs.f_bavail) * sfs.f_bsize;
+
+        LOG_INF("Filesystem [" << path << "] has " << (freeBytes / 1024 / 1024) <<
+                " MB free (" << (sfs.f_bavail * 100. / sfs.f_blocks) << "%).");
+
         // we should be able to run just OK with 5GB
         constexpr int64_t ENOUGH_SPACE = int64_t(5)*1024*1024*1024;
 
-        if (static_cast<int64_t>(sfs.f_bavail) * sfs.f_bsize > ENOUGH_SPACE)
+        if (freeBytes > ENOUGH_SPACE)
             return true;
 
         if (static_cast<double>(sfs.f_bavail) / sfs.f_blocks <= 0.05)


More information about the Libreoffice-commits mailing list