From f43bee9eed90ee5175f9b3e0dd2a7b7d4b3145e4 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Mon, 4 Sep 2023 09:14:46 -0400 Subject: retry file create (#383) * add retry logic when creating files * only write disk usage log if disk writes are allowed * changelog --- src/zenutil/basicfile.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/zenutil/basicfile.cpp') 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 @@ -127,6 +127,22 @@ BasicFile::Open(const std::filesystem::path& FileName, Mode InMode, std::error_c m_FileHandle = FileHandle; } +void +BasicFile::Open(const std::filesystem::path& FileName, Mode Mode, std::function&& 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() { -- cgit v1.2.3