[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