From 5849e3e432d985b23aedddfe3a3128d8ed5b7b11 Mon Sep 17 00:00:00 2001 From: random-zebra Date: Sun, 12 Sep 2021 14:46:56 +0200 Subject: [PATCH] [BUG] Spork signer doesn't persist new spork value to DB --- src/spork.cpp | 20 ++++++++++++-------- src/spork.h | 5 +++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/spork.cpp b/src/spork.cpp index 55190602ed7d..4e7c58e368d4 100644 --- a/src/spork.cpp +++ b/src/spork.cpp @@ -167,11 +167,9 @@ int CSporkManager::ProcessSporkMsg(CSporkMessage& spork) LogPrintf("%s : got %s spork %d (%s) with value %d (signed at %d)\n", __func__, strStatus, spork.nSporkID, sporkName, spork.nValue, spork.nTimeSigned); - AddOrUpdateSporkMessage(spork); + AddOrUpdateSporkMessage(spork, true); spork.Relay(); - // PIVX: add to spork database. - pSporkDB->WriteSpork(spork.nSporkID, spork); // All good. return 0; } @@ -201,18 +199,24 @@ bool CSporkManager::UpdateSpork(SporkId nSporkID, int64_t nValue) if (spork.Sign(strMasterPrivKey)) { spork.Relay(); - AddOrUpdateSporkMessage(spork); + AddOrUpdateSporkMessage(spork, true); return true; } return false; } -void CSporkManager::AddOrUpdateSporkMessage(const CSporkMessage& spork) +void CSporkManager::AddOrUpdateSporkMessage(const CSporkMessage& spork, bool flush) { - LOCK(cs); - mapSporks[spork.GetHash()] = spork; - mapSporksActive[spork.nSporkID] = spork; + { + LOCK(cs); + mapSporks[spork.GetHash()] = spork; + mapSporksActive[spork.nSporkID] = spork; + } + if (flush) { + // add to spork database. + pSporkDB->WriteSpork(spork.nSporkID, spork); + } } // grab the spork value, and see if it's off diff --git a/src/spork.h b/src/spork.h index a7235cc2ec62..1b9964fb7b66 100644 --- a/src/spork.h +++ b/src/spork.h @@ -88,8 +88,9 @@ class CSporkManager int64_t GetSporkValue(SporkId nSporkID); // Create/Sign/Relay the spork message, and update the maps bool UpdateSpork(SporkId nSporkID, int64_t nValue); - // Add spork message to mapSporks and mapSporksActive - void AddOrUpdateSporkMessage(const CSporkMessage& spork); + // Add spork message to mapSporks and mapSporksActive. + // if flush=true, save to DB as well + void AddOrUpdateSporkMessage(const CSporkMessage& spork, bool flush = false); bool IsSporkActive(SporkId nSporkID); std::string GetSporkNameByID(SporkId id);