BlockchainDB: Remove txs in reverse order

Data should be removed in the reverse order it was added. Not doing so
breaks assumptions and can cause problems in other DB implementations.

This matches the order of tx removal in
blockchain_storage::purge_block_data_from_blockchain.
This commit is contained in:
warptangent 2015-12-24 15:01:00 -08:00
parent ffcf6bdb95
commit d4c2fae2fb
No known key found for this signature in database
GPG key ID: 0E490BEBFBE4E92D

View file

@ -26,6 +26,8 @@
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <boost/range/adaptor/reversed.hpp>
#include "blockchain_db.h" #include "blockchain_db.h"
#include "cryptonote_core/cryptonote_format_utils.h" #include "cryptonote_core/cryptonote_format_utils.h"
#include "profile_tools.h" #include "profile_tools.h"
@ -133,13 +135,13 @@ void BlockchainDB::pop_block(block& blk, std::vector<transaction>& txs)
blk = get_top_block(); blk = get_top_block();
remove_block(); remove_block();
remove_transaction(get_transaction_hash(blk.miner_tx)); for (const auto& h : boost::adaptors::reverse(blk.tx_hashes))
for (const auto& h : blk.tx_hashes)
{ {
txs.push_back(get_tx(h)); txs.push_back(get_tx(h));
remove_transaction(h); remove_transaction(h);
} }
remove_transaction(get_transaction_hash(blk.miner_tx));
} }
bool BlockchainDB::is_open() const bool BlockchainDB::is_open() const