diff options
-rw-r--r-- | src/db.cpp | 9 | ||||
-rw-r--r-- | src/db.h | 1 | ||||
-rw-r--r-- | src/init.cpp | 2 | ||||
-rw-r--r-- | src/qt/optionsdialog.cpp | 6 | ||||
-rw-r--r-- | src/qt/optionsmodel.cpp | 9 | ||||
-rw-r--r-- | src/qt/optionsmodel.h | 3 |
6 files changed, 27 insertions, 3 deletions
diff --git a/src/db.cpp b/src/db.cpp index 53da378fee..12647e568a 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -28,6 +28,7 @@ unsigned int nWalletDBUpdated; CCriticalSection cs_db; static bool fDbEnvInit = false; +bool fDetachDB = false; DbEnv dbenv(0); map<string, int> mapFileUseCount; static map<string, Db*> mapDb; @@ -307,9 +308,13 @@ void DBFlush(bool fShutdown) { // Move log data to the dat file CloseDb(strFile); + printf("%s checkpoint\n", strFile.c_str()); dbenv.txn_checkpoint(0, 0, 0); - printf("%s flush\n", strFile.c_str()); - dbenv.lsn_reset(strFile.c_str(), 0); + if ((strFile != "blkindex.dat" && strFile != "addr.dat") || fDetachDB) { + printf("%s detach\n", strFile.c_str()); + dbenv.lsn_reset(strFile.c_str(), 0); + } + printf("%s closed\n", strFile.c_str()); mapFileUseCount.erase(mi++); } else @@ -25,6 +25,7 @@ class CWallet; class CWalletTx; extern unsigned int nWalletDBUpdated; +extern bool fDetachDB; extern DbEnv dbenv; extern void DBFlush(bool fShutdown); diff --git a/src/init.cpp b/src/init.cpp index e7f1c7c015..0671cd7799 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -200,6 +200,7 @@ bool AppInit2(int argc, char* argv[]) #else " -upnp \t " + _("Use Universal Plug and Play to map the listening port (default: 0)") + "\n" + #endif + " -detachdb \t " + _("Detach block and address databases. Increases shutdown time (default: 0)") + "\n" + #endif " -paytxfee=<amt> \t " + _("Fee per KB to add to transactions you send") + "\n" + #ifdef QT_GUI @@ -255,6 +256,7 @@ bool AppInit2(int argc, char* argv[]) } fDebug = GetBoolArg("-debug"); + fDetachDB = GetBoolArg("-detachdb", false); #if !defined(WIN32) && !defined(QT_GUI) fDaemon = GetBoolArg("-daemon"); diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 8233e42c25..59c44ac5f9 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -38,6 +38,7 @@ private: QCheckBox *minimize_on_close; #endif QCheckBox *connect_socks4; + QCheckBox *detach_database; QLineEdit *proxy_ip; QLineEdit *proxy_port; BitcoinAmountField *fee_edit; @@ -229,6 +230,10 @@ MainOptionsPage::MainOptionsPage(QWidget *parent): layout->addLayout(fee_hbox); + detach_database = new QCheckBox(tr("Detach databases at shutdown")); + detach_database->setToolTip(tr("Detach block and address databases at shutdown. This means they can be moved to another data directory, but it slows down shutdown. The wallet is always detached.")); + layout->addWidget(detach_database); + layout->addStretch(1); // Extra space at bottom setLayout(layout); @@ -256,6 +261,7 @@ void MainOptionsPage::setMapper(MonitoredDataMapper *mapper) mapper->addMapping(proxy_ip, OptionsModel::ProxyIP); mapper->addMapping(proxy_port, OptionsModel::ProxyPort); mapper->addMapping(fee_edit, OptionsModel::Fee); + mapper->addMapping(detach_database, OptionsModel::DetachDatabases); } DisplayOptionsPage::DisplayOptionsPage(QWidget *parent): diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 2210c4dd76..5bba308cf2 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -28,6 +28,8 @@ void OptionsModel::Init() SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool()); if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool()) SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString()); + if (settings.contains("detachDB")) + SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool()); } bool OptionsModel::Upgrade() @@ -121,6 +123,8 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const return QVariant(nDisplayUnit); case DisplayAddresses: return QVariant(bDisplayAddresses); + case DetachDatabases: + return QVariant(fDetachDB); default: return QVariant(); } @@ -204,6 +208,11 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in settings.setValue("bDisplayAddresses", bDisplayAddresses); } break; + case DetachDatabases: { + fDetachDB = value.toBool(); + settings.setValue("detachDB", fDetachDB); + } + break; default: break; } diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index 0be70f8935..da4e86f104 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -26,7 +26,8 @@ public: Fee, // qint64 DisplayUnit, // BitcoinUnits::Unit DisplayAddresses, // bool - OptionIDRowCount + DetachDatabases, // bool + OptionIDRowCount, }; void Init(); |