From c21a56f8b3f30e1ca6b48d954a8d1cfea1e613b2 Mon Sep 17 00:00:00 2001 From: Lee *!* Clagett Date: Wed, 23 Oct 2024 15:45:07 -0400 Subject: [PATCH] Fixing shutdown request during sync-phase (#143) --- src/scanner.cpp | 12 +++++++++--- src/scanner.h | 5 ++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/scanner.cpp b/src/scanner.cpp index 066c4e4..c8ac798 100644 --- a/src/scanner.cpp +++ b/src/scanner.cpp @@ -1064,7 +1064,7 @@ namespace lws } template - expect fetch_chain(const scanner_sync& self, rpc::client& client, const char* endpoint, const Q& req) + expect fetch_chain(scanner_sync& self, rpc::client& client, const char* endpoint, const Q& req) { expect sent{lws::error::daemon_timeout}; @@ -1073,6 +1073,9 @@ namespace lws while (!(sent = client.send(std::move(msg), std::chrono::seconds{1}))) { + // Run possible SIGINT handler + self.io_.poll_one(); + self.io_.reset(); if (self.has_shutdown()) return {lws::error::signal_abort_process}; @@ -1088,6 +1091,9 @@ namespace lws while (!(resp = client.get_message(std::chrono::seconds{1}))) { + // Run possible SIGINT handler + self.io_.poll_one(); + self.io_.reset(); if (self.has_shutdown()) return {lws::error::signal_abort_process}; @@ -1101,7 +1107,7 @@ namespace lws } // does not validate blockchain hashes - expect sync_quick(const scanner_sync& self, db::storage disk, rpc::client client) + expect sync_quick(scanner_sync& self, db::storage disk, rpc::client client) { MINFO("Starting blockchain sync with daemon"); @@ -1140,7 +1146,7 @@ namespace lws } // validates blockchain hashes - expect sync_full(const scanner_sync& self, db::storage disk, rpc::client client) + expect sync_full(scanner_sync& self, db::storage disk, rpc::client client) { MINFO("Starting blockchain sync with daemon"); diff --git a/src/scanner.h b/src/scanner.h index 45774fd..2efd4a0 100644 --- a/src/scanner.h +++ b/src/scanner.h @@ -91,7 +91,10 @@ namespace lws void shutdown() { shutdown_ = true; stop(); } }; - //! Scans all active `db::account`s. Detects if another process changes active list. + /*! Scans all active `db::account`s. Detects if another process changes + active list. + + \note Everything except `sync` and `run` is thread-safe. */ class scanner { db::storage disk_;