diff options
| author | Pieter Wuille <[email protected]> | 2012-12-04 23:53:26 +0100 |
|---|---|---|
| committer | Pieter Wuille <[email protected]> | 2012-12-06 22:04:59 +0100 |
| commit | 3fb9b99cca390e8ac5838c03363c46a99396e463 (patch) | |
| tree | 5d792804a3a46b72f35e6490cd8247f81395ff76 /src | |
| parent | Update the block file counter in database when using -reindex (diff) | |
| download | discoin-3fb9b99cca390e8ac5838c03363c46a99396e463.tar.xz discoin-3fb9b99cca390e8ac5838c03363c46a99396e463.zip | |
Allow lengthy block reconnections to be interrupted
When the coin database is out of date with the block database, the
best block in it is automatically switched to. This reconnection
process can take time, so allow it to be interrupted.
This also stops block connection as soon as shutdown is requested,
leading to a faster shutdown.
Diffstat (limited to 'src')
| -rw-r--r-- | src/init.cpp | 8 | ||||
| -rw-r--r-- | src/main.cpp | 7 | ||||
| -rw-r--r-- | src/util.cpp | 2 | ||||
| -rw-r--r-- | src/util.h | 2 |
4 files changed, 11 insertions, 8 deletions
diff --git a/src/init.cpp b/src/init.cpp index a224b336c..b68ca1cf1 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -345,7 +345,7 @@ void ThreadImport(void *data) { if (fReindex) { CImportingNow imp; int nFile = 0; - while (!fShutdown) { + while (!fRequestShutdown) { CDiskBlockPos pos(nFile, 0); FILE *file = OpenBlockFile(pos, true); if (!file) @@ -354,7 +354,7 @@ void ThreadImport(void *data) { LoadExternalBlockFile(file, &pos); nFile++; } - if (!fShutdown) { + if (!fRequestShutdown) { pblocktree->WriteReindexing(false); fReindex = false; printf("Reindexing finished\n"); @@ -363,7 +363,7 @@ void ThreadImport(void *data) { // hardcoded $DATADIR/bootstrap.dat filesystem::path pathBootstrap = GetDataDir() / "bootstrap.dat"; - if (filesystem::exists(pathBootstrap) && !fShutdown) { + if (filesystem::exists(pathBootstrap) && !fRequestShutdown) { FILE *file = fopen(pathBootstrap.string().c_str(), "rb"); if (file) { CImportingNow imp; @@ -376,7 +376,7 @@ void ThreadImport(void *data) { // -loadblock= BOOST_FOREACH(boost::filesystem::path &path, import->vFiles) { - if (fShutdown) + if (fRequestShutdown) break; FILE *file = fopen(path.string().c_str(), "rb"); if (file) { diff --git a/src/main.cpp b/src/main.cpp index 0e0be2f01..158c94783 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1240,9 +1240,12 @@ bool ConnectBestBlock() { if (pindexTest->pprev == NULL || pindexTest->pnext != NULL) { reverse(vAttach.begin(), vAttach.end()); - BOOST_FOREACH(CBlockIndex *pindexSwitch, vAttach) + BOOST_FOREACH(CBlockIndex *pindexSwitch, vAttach) { + if (fRequestShutdown) + break; if (!SetBestChain(pindexSwitch)) return false; + } return true; } pindexTest = pindexTest->pprev; @@ -2553,7 +2556,7 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) } } uint64 nRewind = blkdat.GetPos(); - while (blkdat.good() && !blkdat.eof() && !fShutdown) { + while (blkdat.good() && !blkdat.eof() && !fRequestShutdown) { blkdat.SetPos(nRewind); nRewind++; // start one byte further next time, in case of failure blkdat.SetLimit(); // remove former limit diff --git a/src/util.cpp b/src/util.cpp index bd8ad8acd..3cbc6b196 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -64,7 +64,7 @@ bool fDebug = false; bool fDebugNet = false; bool fPrintToConsole = false; bool fPrintToDebugger = false; -bool fRequestShutdown = false; +volatile bool fRequestShutdown = false; bool fShutdown = false; bool fDaemon = false; bool fServer = false; diff --git a/src/util.h b/src/util.h index ada0dd379..d8203b58e 100644 --- a/src/util.h +++ b/src/util.h @@ -132,7 +132,7 @@ extern bool fDebug; extern bool fDebugNet; extern bool fPrintToConsole; extern bool fPrintToDebugger; -extern bool fRequestShutdown; +extern volatile bool fRequestShutdown; extern bool fShutdown; extern bool fDaemon; extern bool fServer; |