From 4c558e85bd90d77696e9201b8996272176d7adc5 Mon Sep 17 00:00:00 2001
From: Ansariel <ansariel.hiller@phoenixviewer.com>
Date: Thu, 10 Jun 2021 01:09:31 +0200
Subject: [PATCH] Fix more crashes in disk cache due to boost error handling

---
 indra/llfilesystem/lldiskcache.cpp | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/indra/llfilesystem/lldiskcache.cpp b/indra/llfilesystem/lldiskcache.cpp
index 905351886ff..f4d20d0e61b 100644
--- a/indra/llfilesystem/lldiskcache.cpp
+++ b/indra/llfilesystem/lldiskcache.cpp
@@ -253,9 +253,15 @@ void LLDiskCache::updateFileAccessTime(const std::string file_path)
     // current time
     const std::time_t cur_time = std::time(nullptr);
 
+    boost::system::error_code ec;
 #if LL_WINDOWS
     // file last write time
-    const std::time_t last_write_time = boost::filesystem::last_write_time(utf8str_to_utf16str(file_path));
+    const std::time_t last_write_time = boost::filesystem::last_write_time(utf8str_to_utf16str(file_path), ec);
+    if (ec.failed())
+    {
+        LL_WARNS() << "Failed to read last write time for cache file " << file_path << ": " << ec.message() << LL_ENDL;
+        return;
+    }
 
     // delta between cur time and last time the file was written
     const std::time_t delta_time = cur_time - last_write_time;
@@ -264,11 +270,16 @@ void LLDiskCache::updateFileAccessTime(const std::string file_path)
     // before the last one
     if (delta_time > time_threshold)
     {
-        boost::filesystem::last_write_time(utf8str_to_utf16str(file_path), cur_time);
+        boost::filesystem::last_write_time(utf8str_to_utf16str(file_path), cur_time, ec);
     }
 #else
     // file last write time
-    const std::time_t last_write_time = boost::filesystem::last_write_time(file_path);
+    const std::time_t last_write_time = boost::filesystem::last_write_time(file_path, ec);
+    if (ec.failed())
+    {
+        LL_WARNS() << "Failed to read last write time for cache file " << file_path << ": " << ec.message() << LL_ENDL;
+        return;
+    }
 
     // delta between cur time and last time the file was written
     const std::time_t delta_time = cur_time - last_write_time;
@@ -277,9 +288,14 @@ void LLDiskCache::updateFileAccessTime(const std::string file_path)
     // before the last one
     if (delta_time > time_threshold)
     {
-        boost::filesystem::last_write_time(file_path, cur_time);
+        boost::filesystem::last_write_time(file_path, cur_time, ec);
     }
 #endif
+
+    if (ec.failed())
+    {
+        LL_WARNS() << "Failed to update last write time for cache file " << file_path << ": " << ec.message() << LL_ENDL;
+    }
 }
 
 const std::string LLDiskCache::getCacheInfo()
-- 
GitLab