aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax K. <[email protected]>2015-07-30 20:37:58 +0200
committerMax K. <[email protected]>2015-07-30 20:37:58 +0200
commit2bb124df3f0c15bd79b54655ea2ee146dd2e8201 (patch)
treed7f21bfe9765f7282c4719ef80d9621b0fbc34d7 /src
parentMerge pull request #1206 from rnicoll/1.10-txdb (diff)
parentdoc: add important information about tx flood to release notes (diff)
downloaddiscoin-2bb124df3f0c15bd79b54655ea2ee146dd2e8201.tar.xz
discoin-2bb124df3f0c15bd79b54655ea2ee146dd2e8201.zip
Merge pull request #1207 from rnicoll/1.10-bitcoin
Bring client up to date with Bitcoin Core 0.11.0
Diffstat (limited to 'src')
-rw-r--r--src/compat/endian.h2
-rw-r--r--src/init.cpp4
-rw-r--r--src/main.cpp5
-rw-r--r--src/wallet/db.cpp12
-rw-r--r--src/wallet/db.h4
5 files changed, 16 insertions, 11 deletions
diff --git a/src/compat/endian.h b/src/compat/endian.h
index 4d041d655..9fec2a07f 100644
--- a/src/compat/endian.h
+++ b/src/compat/endian.h
@@ -15,6 +15,8 @@
#if defined(HAVE_ENDIAN_H)
#include <endian.h>
+#elif defined(HAVE_SYS_ENDIAN_H)
+#include <sys/endian.h>
#endif
#if defined(WORDS_BIGENDIAN)
diff --git a/src/init.cpp b/src/init.cpp
index fa8e4317e..a49406ec1 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1420,13 +1420,13 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
#endif
StartNode(threadGroup, scheduler);
-#if 0 // Disable partition check for now, it triggers too often (issue #6251)
+
// Monitor the chain, and alert if we get blocks much quicker or slower than expected
int64_t nPowTargetSpacing = Params().GetConsensus().nPowTargetSpacing;
CScheduler::Function f = boost::bind(&PartitionCheck, &IsInitialBlockDownload,
boost::ref(cs_main), boost::cref(pindexBestHeader), nPowTargetSpacing);
scheduler.scheduleEvery(f, nPowTargetSpacing);
-#endif
+
#ifdef ENABLE_WALLET
// Generate coins in the background
if (pwalletMain)
diff --git a/src/main.cpp b/src/main.cpp
index 35c4ae7c0..b42638096 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -436,13 +436,14 @@ void FindNextBlocksToDownload(NodeId nodeid, unsigned int count, std::vector<CBl
// Iterate over those blocks in vToFetch (in forward direction), adding the ones that
// are not yet downloaded and not in flight to vBlocks. In the mean time, update
- // pindexLastCommonBlock as long as all ancestors are already downloaded.
+ // pindexLastCommonBlock as long as all ancestors are already downloaded, or if it's
+ // already part of our chain (and therefore don't need it even if pruned).
BOOST_FOREACH(CBlockIndex* pindex, vToFetch) {
if (!pindex->IsValid(BLOCK_VALID_TREE)) {
// We consider the chain that this peer is on invalid.
return;
}
- if (pindex->nStatus & BLOCK_HAVE_DATA) {
+ if (pindex->nStatus & BLOCK_HAVE_DATA || chainActive.Contains(pindex)) {
if (pindex->nChainTx)
state->pindexLastCommonBlock = pindex;
} else if (mapBlocksInFlight.count(pindex->GetBlockHash()) == 0) {
diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp
index 53cfcf096..e5bc653c3 100644
--- a/src/wallet/db.cpp
+++ b/src/wallet/db.cpp
@@ -43,7 +43,7 @@ void CDBEnv::EnvShutdown()
if (ret != 0)
LogPrintf("CDBEnv::EnvShutdown: Error %d shutting down database environment: %s\n", ret, DbEnv::strerror(ret));
if (!fMockDb)
- DbEnv(0).remove(path.string().c_str(), 0);
+ DbEnv(0).remove(strPath.c_str(), 0);
}
void CDBEnv::Reset()
@@ -78,10 +78,10 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn)
boost::this_thread::interruption_point();
- path = pathIn;
- boost::filesystem::path pathLogDir = path / "database";
+ strPath = pathIn.string();
+ boost::filesystem::path pathLogDir = pathIn / "database";
TryCreateDirectory(pathLogDir);
- boost::filesystem::path pathErrorFile = path / "db.log";
+ boost::filesystem::path pathErrorFile = pathIn / "db.log";
LogPrintf("CDBEnv::Open: LogDir=%s ErrorFile=%s\n", pathLogDir.string(), pathErrorFile.string());
unsigned int nEnvFlags = 0;
@@ -98,7 +98,7 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn)
dbenv->set_flags(DB_AUTO_COMMIT, 1);
dbenv->set_flags(DB_TXN_WRITE_NOSYNC, 1);
dbenv->log_set_config(DB_LOG_AUTO_REMOVE, 1);
- int ret = dbenv->open(path.string().c_str(),
+ int ret = dbenv->open(strPath.c_str(),
DB_CREATE |
DB_INIT_LOCK |
DB_INIT_LOG |
@@ -455,7 +455,7 @@ void CDBEnv::Flush(bool fShutdown)
dbenv->log_archive(&listp, DB_ARCH_REMOVE);
Close();
if (!fMockDb)
- boost::filesystem::remove_all(path / "database");
+ boost::filesystem::remove_all(boost::filesystem::path(strPath) / "database");
}
}
}
diff --git a/src/wallet/db.h b/src/wallet/db.h
index 2df6f6e5a..64071caa3 100644
--- a/src/wallet/db.h
+++ b/src/wallet/db.h
@@ -27,7 +27,9 @@ class CDBEnv
private:
bool fDbEnvInit;
bool fMockDb;
- boost::filesystem::path path;
+ // Don't change into boost::filesystem::path, as that can result in
+ // shutdown problems/crashes caused by a static initialized internal pointer.
+ std::string strPath;
void EnvShutdown();