|
|
@ -439,8 +439,9 @@ bool AppInit2() |
|
|
|
FILE* file = fopen(pathLockFile.string().c_str(), "a"); // empty lock file; created if it doesn't exist.
|
|
|
|
FILE* file = fopen(pathLockFile.string().c_str(), "a"); // empty lock file; created if it doesn't exist.
|
|
|
|
if (file) fclose(file); |
|
|
|
if (file) fclose(file); |
|
|
|
static boost::interprocess::file_lock lock(pathLockFile.string().c_str()); |
|
|
|
static boost::interprocess::file_lock lock(pathLockFile.string().c_str()); |
|
|
|
|
|
|
|
const char* pszDataDir = GetDataDir().string().c_str(); |
|
|
|
if (!lock.try_lock()) |
|
|
|
if (!lock.try_lock()) |
|
|
|
return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin is probably already running."), GetDataDir().string().c_str())); |
|
|
|
return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin is probably already running."), pszDataDir)); |
|
|
|
|
|
|
|
|
|
|
|
#if !defined(WIN32) && !defined(QT_GUI) |
|
|
|
#if !defined(WIN32) && !defined(QT_GUI) |
|
|
|
if (fDaemon) |
|
|
|
if (fDaemon) |
|
|
@ -472,7 +473,7 @@ bool AppInit2() |
|
|
|
if (!fLogTimestamps) |
|
|
|
if (!fLogTimestamps) |
|
|
|
printf("Startup time: %s\n", DateTimeStrFormat("%x %H:%M:%S", GetTime()).c_str()); |
|
|
|
printf("Startup time: %s\n", DateTimeStrFormat("%x %H:%M:%S", GetTime()).c_str()); |
|
|
|
printf("Default data directory %s\n", GetDefaultDataDir().string().c_str()); |
|
|
|
printf("Default data directory %s\n", GetDefaultDataDir().string().c_str()); |
|
|
|
printf("Used data directory %s\n", GetDataDir().string().c_str()); |
|
|
|
printf("Used data directory %s\n", pszDataDir); |
|
|
|
std::ostringstream strErrors; |
|
|
|
std::ostringstream strErrors; |
|
|
|
|
|
|
|
|
|
|
|
if (fDaemon) |
|
|
|
if (fDaemon) |
|
|
@ -588,6 +589,14 @@ bool AppInit2() |
|
|
|
|
|
|
|
|
|
|
|
// ********************************************************* Step 6: load blockchain
|
|
|
|
// ********************************************************* Step 6: load blockchain
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!bitdb.Open(GetDataDir())) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
string msg = strprintf(_("Error initializing database environment %s!" |
|
|
|
|
|
|
|
" To recover, BACKUP THAT DIRECTORY, then remove" |
|
|
|
|
|
|
|
" everything from it except for wallet.dat."), pszDataDir); |
|
|
|
|
|
|
|
return InitError(msg); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (GetBoolArg("-loadblockindextest")) |
|
|
|
if (GetBoolArg("-loadblockindextest")) |
|
|
|
{ |
|
|
|
{ |
|
|
|
CTxDB txdb("r"); |
|
|
|
CTxDB txdb("r"); |
|
|
@ -600,7 +609,7 @@ bool AppInit2() |
|
|
|
printf("Loading block index...\n"); |
|
|
|
printf("Loading block index...\n"); |
|
|
|
nStart = GetTimeMillis(); |
|
|
|
nStart = GetTimeMillis(); |
|
|
|
if (!LoadBlockIndex()) |
|
|
|
if (!LoadBlockIndex()) |
|
|
|
strErrors << _("Error loading blkindex.dat") << "\n"; |
|
|
|
return InitError(_("Error loading blkindex.dat")); |
|
|
|
|
|
|
|
|
|
|
|
// as LoadBlockIndex can take several minutes, it's possible the user
|
|
|
|
// as LoadBlockIndex can take several minutes, it's possible the user
|
|
|
|
// requested to kill bitcoin-qt during the last operation. If so, exit.
|
|
|
|
// requested to kill bitcoin-qt during the last operation. If so, exit.
|
|
|
|