aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/compat.h4
-rw-r--r--src/db.cpp9
-rw-r--r--src/db.h1
-rw-r--r--src/init.cpp2
-rw-r--r--src/makefile.linux-mingw14
-rw-r--r--src/makefile.mingw16
-rw-r--r--src/makefile.osx3
-rw-r--r--src/makefile.unix2
-rw-r--r--src/qt/optionsdialog.cpp6
-rw-r--r--src/qt/optionsmodel.cpp9
-rw-r--r--src/qt/optionsmodel.h3
-rw-r--r--src/script.cpp2
-rw-r--r--src/test/script_tests.cpp8
13 files changed, 55 insertions, 24 deletions
diff --git a/src/compat.h b/src/compat.h
index db340445b2..804a8141b5 100644
--- a/src/compat.h
+++ b/src/compat.h
@@ -21,10 +21,8 @@
#include <arpa/inet.h>
#include <netdb.h>
#include <net/if.h>
-#include <ifaddrs.h>
-#endif
-#ifdef BSD
#include <netinet/in.h>
+#include <ifaddrs.h>
#endif
typedef u_int SOCKET;
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
diff --git a/src/db.h b/src/db.h
index 48e10a95a7..3ce8f1758f 100644
--- a/src/db.h
+++ b/src/db.h
@@ -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/makefile.linux-mingw b/src/makefile.linux-mingw
index 1ea65cd2e5..8e4e638176 100644
--- a/src/makefile.linux-mingw
+++ b/src/makefile.linux-mingw
@@ -31,6 +31,7 @@ DEFS=-D_MT -DWIN32 -D_WINDOWS -DNOPCH -DBOOST_THREAD_USE_LIB
DEBUGFLAGS=-g
CFLAGS=-O2 -w -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
+TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
ifdef USE_UPNP
LIBPATHS += -L"$(DEPSDIR)/miniupnpc"
@@ -78,20 +79,19 @@ obj/%.o: %.cpp $(HEADERS)
bitcoind.exe: $(OBJS:obj/%=obj/%)
i586-mingw32msvc-g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
+TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp))
-obj/test/%.o: obj/test/%.cpp $(HEADERS)
- i586-mingw32msvc-g++ -c $(CFLAGS) -o $@ $<
+obj-test/%.o: test/%.cpp $(HEADERS)
+ i586-mingw32msvc-g++ -c $(TESTDEFS) $(CFLAGS) -o $@ $<
-test_bitcoin.exe: obj/test/test_bitcoin.o $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
- i586-mingw32msvc-g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -lboost_unit_test_framework-mt-s
+test_bitcoin.exe: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
+ i586-mingw32msvc-g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ -lboost_unit_test_framework $(LIBS)
clean:
-rm -f obj/*.o
- -rm -f obj/test/*.o
- -rm -f test/*.o
- -rm -f headers.h.gch
-rm -f bitcoind.exe
+ -rm -f obj-test/*.o
-rm -f test_bitcoin.exe
-rm -f src/build.h
diff --git a/src/makefile.mingw b/src/makefile.mingw
index 5584df5603..abcdcce675 100644
--- a/src/makefile.mingw
+++ b/src/makefile.mingw
@@ -27,6 +27,7 @@ DEFS=-DWIN32 -D_WINDOWS -DNOPCH -DBOOST_THREAD_USE_LIB
DEBUGFLAGS=-g
CFLAGS=-mthreads -O2 -w -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
+TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
ifdef USE_UPNP
INCLUDEPATHS += -I"C:\miniupnpc-1.6-mgw"
@@ -71,17 +72,16 @@ obj/%.o: %.cpp $(HEADERS)
bitcoind.exe: $(OBJS:obj/%=obj/%)
g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
-obj/test/test_bitcoin.o: $(wildcard test/*.cpp) $(HEADERS)
- g++ -c $(CFLAGS) -o $@ test/test_bitcoin.cpp
+TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp))
-test_bitcoin.exe: obj/test/test_bitcoin.o $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
- g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
+obj-test/%.o: test/%.cpp $(HEADERS)
+ g++ -c $(TESTDEFS) $(CFLAGS) -o $@ $<
+
+test_bitcoin.exe: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
+ g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ -lboost_unit_test_framework $(LIBS)
clean:
-del /Q bitcoind test_bitcoin
-del /Q obj\*
- -del /Q obj\nogui\*
- -del /Q obj\test\*
- -del /Q test\*.o
- -del /Q headers.h.gch
+ -del /Q obj-test\*
-del /Q build.h
diff --git a/src/makefile.osx b/src/makefile.osx
index aaac6700bd..be95aab446 100644
--- a/src/makefile.osx
+++ b/src/makefile.osx
@@ -22,6 +22,9 @@ LIBPATHS= \
USE_UPNP:=1
LIBS= -dead_strip
+
+TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
+
ifdef STATIC
# Build STATIC if you are redistributing the bitcoind binary
TESTLIBS += \
diff --git a/src/makefile.unix b/src/makefile.unix
index fc901ca02c..146f6b8ebc 100644
--- a/src/makefile.unix
+++ b/src/makefile.unix
@@ -9,6 +9,8 @@ DEFS=-DNOPCH
DEFS += $(addprefix -I,$(CURDIR) $(CURDIR)/obj $(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH))
LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH))
+TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
+
LMODE = dynamic
LMODE2 = dynamic
ifdef STATIC
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();
diff --git a/src/script.cpp b/src/script.cpp
index 660023ef48..65e9b7c9a2 100644
--- a/src/script.cpp
+++ b/src/script.cpp
@@ -939,7 +939,7 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, co
{
// ([sig ...] num_of_signatures [pubkey ...] num_of_pubkeys -- bool)
- unsigned int i = 1;
+ int i = 1;
if (stack.size() < i)
return false;
diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp
index 988bd24de8..745df4bd7b 100644
--- a/src/test/script_tests.cpp
+++ b/src/test/script_tests.cpp
@@ -5,8 +5,9 @@
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/algorithm/string/split.hpp>
-#include <boost/test/unit_test.hpp>
#include <boost/foreach.hpp>
+#include <boost/preprocessor/stringize.hpp>
+#include <boost/test/unit_test.hpp>
#include "json/json_spirit_reader_template.h"
#include "json/json_spirit_writer_template.h"
#include "json/json_spirit_utils.h"
@@ -87,10 +88,13 @@ read_json(const std::string& filename)
{
namespace fs = boost::filesystem;
fs::path testFile = fs::current_path() / "test" / "data" / filename;
+
+#ifdef TEST_DATA_DIR
if (!fs::exists(testFile))
{
- fs::path testFile = fs::path(__FILE__).parent_path() / "data" / filename;
+ testFile = fs::path(BOOST_PP_STRINGIZE(TEST_DATA_DIR)) / filename;
}
+#endif
ifstream ifs(testFile.string().c_str(), ifstream::in);
Value v;