Page MenuHomePhabricator

Merge #12401: Reset pblocktree before deleting LevelDB file
ClosedPublic

Authored by nakihito on Jun 17 2020, 23:33.

Details

Reviewers
jasonbcox
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Restricted Project
Commits
rABC5ba4892705aa: Merge #12401: Reset pblocktree before deleting LevelDB file
Summary

a8b5d20 Reset pblocktree before deleting LevelDB file (Sjors Provoost)

Pull request description:

#11043 repaced:

```
delete pblocktree;
pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReset);
```

With:

```
pblocktree.reset(new CBlockTreeDB(nBlockTreeDBCache, false, fReset));
```

This is problematic because `new CBlockTreeDB` tries to delete the existing file, which will fail with `LOCK: already held by process` if it's still open. That's the case for QT.

When QT finds a problem with the index it will ask the user if they want to reindex. At that point it has already opened `blocks/index`.  It then runs this [while loop](https://github.com/bitcoin/bitcoin/blob/v0.16.0rc3/src/init.cpp#L1415) again with `fReset = 1`, resulting in the above error.

This change makes that error go away, presumably because `reset()` without an argument closes the file.

Tree-SHA512: fde8b546912f6773ac64da8476673cc270b125aa2d909212391d1a2001b35c8260a8772126b99dfd76b39faaa286feb7c43239185fe584bd4dc2bc04a64044ce

Backport of Core PR12401

Test Plan
ninja
ninja check-all
src/bitoin-qt

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Owners added a reviewer: Restricted Owners Package.Jun 17 2020, 23:33
nakihito planned changes to this revision.

[Bot Message]
One or more PR numbers were detected in the summary.
Links to those PRs have been inserted into the summary for reference.

This revision is now accepted and ready to land.Jun 18 2020, 21:19