unsigned int nWalletDBUpdated;
-
+extern bool fUseMemoryLog;
//
fDbEnvInit = true;
fMockDb = false;
+#ifndef USE_LEVELDB
+ // Check that the number of locks is sufficient (to prevent chain fork possibility, read http://bitcoin.org/may15 for more info)
+ u_int32_t nMaxLocks;
+ if (!dbenv.get_lk_max_locks(&nMaxLocks))
+ {
+ int nBlocks, nDeepReorg;
+ std::string strMessage;
+
+ nBlocks = nMaxLocks / 48768;
+ nDeepReorg = (nBlocks - 1) / 2;
+
+ printf("Final lk_max_locks is %lu, sufficient for (worst case) %d block%s in a single transaction (up to a %d-deep reorganization)\n", (unsigned long)nMaxLocks, nBlocks, (nBlocks == 1) ? "" : "s", nDeepReorg);
+ if (nDeepReorg < 3)
+ {
+ if (nBlocks < 1)
+ strMessage = strprintf(_("Warning: DB_CONFIG has set_lk_max_locks %lu, which may be too low for a single block. If this limit is reached, NovaCoin may stop working."), (unsigned long)nMaxLocks);
+ else
+ strMessage = strprintf(_("Warning: DB_CONFIG has set_lk_max_locks %lu, which may be too low for a common blockchain reorganization. If this limit is reached, NovaCoin may stop working."), (unsigned long)nMaxLocks);
+
+ strMiscWarning = strMessage;
+ printf("*** %s\n", strMessage.c_str());
+ }
+ }
+#endif
+
return true;
}
dbenv.set_lk_max_objects(10000);
dbenv.set_flags(DB_AUTO_COMMIT, 1);
#ifdef DB_LOG_IN_MEMORY
- dbenv.log_set_config(DB_LOG_IN_MEMORY, 1);
+ dbenv.log_set_config(DB_LOG_IN_MEMORY, fUseMemoryLog ? 1 : 0);
#endif
int ret = dbenv.open(NULL,
DB_CREATE |
return;
fReadOnly = (!strchr(pszMode, '+') && !strchr(pszMode, 'w'));
- bool fCreate = strchr(pszMode, 'c');
+ bool fCreate = strchr(pszMode, 'c') != NULL;
unsigned int nFlags = DB_THREAD;
if (fCreate)
nFlags |= DB_CREATE;
void CDBEnv::Flush(bool fShutdown)
{
- int64 nStart = GetTimeMillis();
+ int64_t nStart = GetTimeMillis();
// Flush log data to the actual data file
// on all files that are not in use
printf("Flush(%s)%s\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " db not started");
else
mi++;
}
- printf("DBFlush(%s)%s ended %15"PRI64d"ms\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " db not started", GetTimeMillis() - nStart);
+ printf("DBFlush(%s)%s ended %15" PRId64 "ms\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " db not started", GetTimeMillis() - nStart);
if (fShutdown)
{
char** listp;
try {
fileout << ssPeers;
}
- catch (std::exception &e) {
+ catch (const std::exception&) {
return error("CAddrman::Write() : I/O error");
}
FileCommit(fileout);
filein.read((char *)&vchData[0], dataSize);
filein >> hashIn;
}
- catch (std::exception &e) {
+ catch (const std::exception&) {
return error("CAddrman::Read() 2 : I/O error or stream data corrupted");
}
filein.fclose();
// de-serialize address data into one CAddrMan object
ssPeers >> addr;
}
- catch (std::exception &e) {
+ catch (const std::exception&) {
return error("CAddrman::Read() : I/O error or stream data corrupted");
}