aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/basicfile.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-09-04 09:14:46 -0400
committerGitHub <[email protected]>2023-09-04 15:14:46 +0200
commitf43bee9eed90ee5175f9b3e0dd2a7b7d4b3145e4 (patch)
tree02c1ed9658eadfdfd13795b932e4743b566a5941 /src/zenutil/basicfile.cpp
parentadd `--write-config` to zenserver options (#382) (diff)
downloadzen-f43bee9eed90ee5175f9b3e0dd2a7b7d4b3145e4.tar.xz
zen-f43bee9eed90ee5175f9b3e0dd2a7b7d4b3145e4.zip
retry file create (#383)
* add retry logic when creating files * only write disk usage log if disk writes are allowed * changelog
Diffstat (limited to 'src/zenutil/basicfile.cpp')
-rw-r--r--src/zenutil/basicfile.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/zenutil/basicfile.cpp b/src/zenutil/basicfile.cpp
index 12d9cf950..84e8bed85 100644
--- a/src/zenutil/basicfile.cpp
+++ b/src/zenutil/basicfile.cpp
@@ -128,6 +128,22 @@ BasicFile::Open(const std::filesystem::path& FileName, Mode InMode, std::error_c
}
void
+BasicFile::Open(const std::filesystem::path& FileName, Mode Mode, std::function<bool(std::error_code& Ec)>&& RetryCallback)
+{
+ std::error_code Ec;
+ Open(FileName, Mode, Ec);
+ while (Ec && RetryCallback(Ec))
+ {
+ Ec.clear();
+ Open(FileName, Mode, Ec);
+ }
+ if (Ec)
+ {
+ throw std::system_error(Ec, fmt::format("failed to open file '{}', mode: {:x}", FileName, uint32_t(Mode)));
+ }
+}
+
+void
BasicFile::Close()
{
if (m_FileHandle)