From 083a79f9a4320a32e26d08137949019b0128b80a Mon Sep 17 00:00:00 2001 From: Christian Krause Date: Mon, 16 Dec 2024 17:50:07 +0100 Subject: [PATCH] fix error handling --- CHANGELOG.md | 6 ++++++ src/cmd/boinc.cpp | 7 ++++--- src/mine/miner.cpp | 14 ++++++++++---- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6997b609..0ce444f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ To install or update LODA, please follow the [installation instructions](https:/ ## [Unreleased] +## v24.12.16 + +### Bugfixes + +* Fix error handling + ## v24.12.15 ### Enhancements diff --git a/src/cmd/boinc.cpp b/src/cmd/boinc.cpp index cbb550ba..1623ad71 100644 --- a/src/cmd/boinc.cpp +++ b/src/cmd/boinc.cpp @@ -131,9 +131,10 @@ void Boinc::run() { !Git::git(progs_dir, "pull origin main -q --ff-only", false)) { Log::get().error("Failed to update programs repository", false); const auto age = getFileAgeInDays(progs_dir); - if (age >= 7) { - Log::get().warn("Deleting corrupt programs directory (age: " + - std::to_string(age) + " days)"); + Log::get().info("Programs directory age: " + std::to_string(age) + + " days"); + if (age >= 3) { // magic number + Log::get().warn("Deleting corrupt programs directory"); rmDirRecursive(progs_dir); } } diff --git a/src/mine/miner.cpp b/src/mine/miner.cpp index 46742706..a5fc3845 100644 --- a/src/mine/miner.cpp +++ b/src/mine/miner.cpp @@ -61,7 +61,7 @@ void Miner::reload() { manager->releaseStats(); // not needed anymore } -void shutdown() { +void signalShutdown() { if (!Signals::HALT) { Log::get().info("Signaling shutdown"); Signals::HALT = true; @@ -79,9 +79,10 @@ void Miner::mine() { std::this_thread::sleep_for(delay); } monitor->writeProgress(); // final write - shutdown(); + signalShutdown(); }); + bool error = false; try { // load manager if (!manager) { @@ -95,16 +96,21 @@ void Miner::mine() { Log::get().error( "Error during initialization or mining: " + std::string(e.what()), false); - shutdown(); + signalShutdown(); + error = true; } catch (...) { Log::get().error("Unknown error during initialization or mining", false); - shutdown(); + signalShutdown(); + error = true; } try { monitor_thread.join(); } catch (...) { Log::get().warn("Error joining progress monitoring thread"); } + if (error) { + Log::get().error("Exiting due to error", true); // exit with error + } } else { // load manager if (!manager) {