Merge pull request #931

b3801fa hardfork: fix off by one in rescaning fork state after restart (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2016-07-26 08:54:23 +02:00
commit 1daef32844
No known key found for this signature in database
GPG key ID: 55432DF31CCD4FCD

View file

@ -164,7 +164,7 @@ void HardFork::init()
// restore state from DB // restore state from DB
uint64_t height = db.height(); uint64_t height = db.height();
if (height > window_size) if (height > window_size)
height -= window_size; height -= window_size - 1;
else else
height = 1; height = 1;
@ -259,8 +259,7 @@ bool HardFork::rescan_from_block_height(uint64_t height)
for (size_t n = 0; n < 256; ++n) for (size_t n = 0; n < 256; ++n)
last_versions[n] = 0; last_versions[n] = 0;
const uint64_t rescan_height = height >= (window_size - 1) ? height - (window_size -1) : 0; for (uint64_t h = height; h < db.height(); ++h) {
for (uint64_t h = rescan_height; h <= height; ++h) {
cryptonote::block b = db.get_block_from_height(h); cryptonote::block b = db.get_block_from_height(h);
const uint8_t v = get_effective_version(get_block_vote(b)); const uint8_t v = get_effective_version(get_block_vote(b));
last_versions[v]++; last_versions[v]++;
@ -271,6 +270,12 @@ bool HardFork::rescan_from_block_height(uint64_t height)
current_fork_index = 0; current_fork_index = 0;
while (current_fork_index + 1 < heights.size() && heights[current_fork_index].version != lastv) while (current_fork_index + 1 < heights.size() && heights[current_fork_index].version != lastv)
++current_fork_index; ++current_fork_index;
uint8_t voted = get_voted_fork_index(db.height());
if (voted > current_fork_index) {
current_fork_index = voted;
}
db.block_txn_stop(); db.block_txn_stop();
return true; return true;