diff --git a/src/scanner.cpp b/src/scanner.cpp index 740ce1e..739e21f 100644 --- a/src/scanner.cpp +++ b/src/scanner.cpp @@ -1069,7 +1069,7 @@ namespace lws } template<typename R, typename Q> - expect<typename R::response> fetch_chain(const scanner_sync& self, rpc::client& client, const char* endpoint, const Q& req) + expect<typename R::response> fetch_chain(scanner_sync& self, rpc::client& client, const char* endpoint, const Q& req) { expect<void> sent{lws::error::daemon_timeout}; @@ -1078,6 +1078,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}; @@ -1093,6 +1096,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}; @@ -1106,7 +1112,7 @@ namespace lws } // does not validate blockchain hashes - expect<rpc::client> sync_quick(const scanner_sync& self, db::storage disk, rpc::client client) + expect<rpc::client> sync_quick(scanner_sync& self, db::storage disk, rpc::client client) { MINFO("Starting blockchain sync with daemon"); @@ -1145,7 +1151,7 @@ namespace lws } // validates blockchain hashes - expect<rpc::client> sync_full(const scanner_sync& self, db::storage disk, rpc::client client) + expect<rpc::client> 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_;