Fixed JSON RPC handling during shutdown

This commit is contained in:
SChernykh
2022-07-05 14:29:41 +02:00
parent 340a3e85c8
commit 4ec0fe8d96
3 changed files with 54 additions and 9 deletions
+24 -6
View File
@@ -775,8 +775,10 @@ void p2pool::get_info()
{
if (size > 0) {
LOGWARN(1, "get_info RPC request failed: error " << log::const_buf(data, size) << ", trying again in 1 second");
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
get_info();
if (!m_stopped) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
get_info();
}
}
});
}
@@ -820,6 +822,10 @@ void p2pool::load_found_blocks()
void p2pool::parse_get_info_rpc(const char* data, size_t size)
{
if (m_stopped) {
return;
}
rapidjson::Document doc;
doc.Parse<rapidjson::kParseCommentsFlag | rapidjson::kParseTrailingCommasFlag>(data, size);
@@ -881,14 +887,20 @@ void p2pool::get_version()
{
if (size > 0) {
LOGWARN(1, "get_version RPC request failed: error " << log::const_buf(data, size) << ", trying again in 1 second");
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
get_version();
if (!m_stopped) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
get_version();
}
}
});
}
void p2pool::parse_get_version_rpc(const char* data, size_t size)
{
if (m_stopped) {
return;
}
rapidjson::Document doc;
doc.Parse<rapidjson::kParseCommentsFlag | rapidjson::kParseTrailingCommasFlag>(data, size);
@@ -945,8 +957,10 @@ void p2pool::get_miner_data()
{
if (size > 0) {
LOGWARN(1, "get_miner_data RPC request failed: error " << log::const_buf(data, size) << ", trying again in 1 second");
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
get_miner_data();
if (!m_stopped) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
get_miner_data();
}
}
else {
m_getMinerDataPending = false;
@@ -956,6 +970,10 @@ void p2pool::get_miner_data()
void p2pool::parse_get_miner_data_rpc(const char* data, size_t size)
{
if (m_stopped) {
return;
}
hash h;
keccak(reinterpret_cast<const uint8_t*>(data), static_cast<int>(size), h.h, HASH_SIZE);
if (h == m_getMinerDataHash) {