diff options
| author | Dan Engelbrecht <[email protected]> | 2023-09-04 09:14:46 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-09-04 15:14:46 +0200 |
| commit | f43bee9eed90ee5175f9b3e0dd2a7b7d4b3145e4 (patch) | |
| tree | 02c1ed9658eadfdfd13795b932e4743b566a5941 /src/zenutil/basicfile.cpp | |
| parent | add `--write-config` to zenserver options (#382) (diff) | |
| download | zen-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.cpp | 16 |
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) |