mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-02-16 10:29:00 +00:00
Merge branch '0.5.x' into 0.6.0.x
Conflicts: src/main.h src/net.cpp src/serialize.h
This commit is contained in:
commit
6ec9d30905
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,6 +1,7 @@
|
||||
src/*.exe
|
||||
src/bitcoin
|
||||
src/bitcoind
|
||||
src/test_bitcoin
|
||||
.*.swp
|
||||
*.*~*
|
||||
*.bak
|
||||
|
||||
@ -35,7 +35,7 @@ Description: peer-to-peer network based digital currency - daemon
|
||||
By default connects to an IRC network to discover other peers.
|
||||
.
|
||||
Full transaction history is stored locally at each client. This
|
||||
requires 150+ MB of space, slowly growing.
|
||||
requires 2+ GB of space, slowly growing.
|
||||
.
|
||||
This package provides bitcoind, a combined daemon and CLI tool to
|
||||
interact with the daemon.
|
||||
@ -53,6 +53,6 @@ Description: peer-to-peer network based digital currency - QT GUI
|
||||
By default connects to an IRC network to discover other peers.
|
||||
.
|
||||
Full transaction history is stored locally at each client. This
|
||||
requires 150+ MB of space, slowly growing.
|
||||
requires 2+ GB of space, slowly growing.
|
||||
.
|
||||
This package provides bitcoin-qt, a GUI for Bitcoin based on QT.
|
||||
|
||||
@ -31,7 +31,7 @@ signers:
|
||||
weight: 40
|
||||
name: "Gavin Andresen"
|
||||
key: gavinandresen
|
||||
71A3B16735405025D447E8F274810B012346C9A6
|
||||
71A3B16735405025D447E8F274810B012346C9A6:
|
||||
weight: 40
|
||||
name: "Wladimir J. van der Laan"
|
||||
key: laanwj
|
||||
|
||||
@ -31,7 +31,7 @@ signers:
|
||||
weight: 40
|
||||
name: "Gavin Andresen"
|
||||
key: gavinandresen
|
||||
71A3B16735405025D447E8F274810B012346C9A6
|
||||
71A3B16735405025D447E8F274810B012346C9A6:
|
||||
weight: 40
|
||||
name: "Wladimir J. van der Laan"
|
||||
key: laanwj
|
||||
|
||||
@ -33,7 +33,7 @@ Dependencies
|
||||
miniupnpc may be used for UPnP port mapping. It can be downloaded from
|
||||
http://miniupnp.tuxfamily.org/files/. UPnP support is compiled in and
|
||||
turned off by default. Set USE_UPNP to a different value to control this:
|
||||
USE_UPNP= No UPnP support - miniupnp not required
|
||||
USE_UPNP=- No UPnP support - miniupnp not required
|
||||
USE_UPNP=0 (the default) UPnP support turned off by default at runtime
|
||||
USE_UPNP=1 UPnP support turned on by default at runtime
|
||||
|
||||
|
||||
@ -98,6 +98,8 @@
|
||||
|
||||
* update wiki download links
|
||||
|
||||
* update wiki changelog: https://en.bitcoin.it/wiki/Changelog
|
||||
|
||||
* Commit your signature to gitian.sigs:
|
||||
pushd gitian.sigs
|
||||
git add ${VERSION}/${SIGNER}
|
||||
|
||||
@ -223,7 +223,8 @@ Value stop(const Array& params, bool fHelp)
|
||||
"Stop bitcoin server.");
|
||||
#ifndef QT_GUI
|
||||
// Shutdown will take long enough that the response should get back
|
||||
CreateThread(Shutdown, NULL);
|
||||
// NOTE: This should actually work with Bitcoin-Qt too now, but 0.6.0 didn't allow it
|
||||
StartShutdown();
|
||||
return "bitcoin server stopping";
|
||||
#else
|
||||
throw runtime_error("NYI: cannot shut down GUI with RPC command");
|
||||
@ -1713,7 +1714,7 @@ Value encryptwallet(const Array& params, bool fHelp)
|
||||
// BDB seems to have a bad habit of writing old data into
|
||||
// slack space in .dat files; that is bad if the old data is
|
||||
// unencrypted private keys. So:
|
||||
CreateThread(Shutdown, NULL);
|
||||
StartShutdown();
|
||||
return "wallet encrypted; bitcoin server stopping, restart to run with encrypted wallet";
|
||||
}
|
||||
|
||||
@ -2372,10 +2373,6 @@ void ThreadRPCServer(void* parg)
|
||||
printf("ThreadRPCServer exiting\n");
|
||||
}
|
||||
|
||||
#ifdef QT_GUI
|
||||
extern bool HACK_SHUTDOWN;
|
||||
#endif
|
||||
|
||||
void ThreadRPCServer2(void* parg)
|
||||
{
|
||||
printf("ThreadRPCServer started\n");
|
||||
@ -2402,7 +2399,7 @@ void ThreadRPCServer2(void* parg)
|
||||
EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32).c_str()),
|
||||
_("Error"), wxOK | wxMODAL);
|
||||
#ifndef QT_GUI
|
||||
CreateThread(Shutdown, NULL);
|
||||
StartShutdown();
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
@ -2427,9 +2424,9 @@ void ThreadRPCServer2(void* parg)
|
||||
}
|
||||
catch(boost::system::system_error &e)
|
||||
{
|
||||
HACK_SHUTDOWN = true;
|
||||
ThreadSafeMessageBox(strprintf(_("An error occured while setting up the RPC port %i for listening: %s"), endpoint.port(), e.what()),
|
||||
_("Error"), wxOK | wxMODAL);
|
||||
StartShutdown();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
14
src/init.cpp
14
src/init.cpp
@ -42,6 +42,17 @@ void ExitTimeout(void* parg)
|
||||
#endif
|
||||
}
|
||||
|
||||
void StartShutdown()
|
||||
{
|
||||
#ifdef QT_GUI
|
||||
// ensure we leave the Qt main loop for a clean GUI exit (Shutdown() is called in bitcoin.cpp afterwards)
|
||||
QueueShutdown();
|
||||
#else
|
||||
// Without UI, Shutdown() can simply be started in a new thread
|
||||
CreateThread(Shutdown, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
void Shutdown(void* parg)
|
||||
{
|
||||
static CCriticalSection cs_Shutdown;
|
||||
@ -67,7 +78,10 @@ void Shutdown(void* parg)
|
||||
Sleep(50);
|
||||
printf("Bitcoin exiting\n\n");
|
||||
fExit = true;
|
||||
#ifndef QT_GUI
|
||||
// ensure non UI client get's exited here, but let Bitcoin-Qt reach return 0; in bitcoin.cpp
|
||||
exit(0);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
|
||||
extern CWallet* pwalletMain;
|
||||
|
||||
void StartShutdown();
|
||||
void Shutdown(void* parg);
|
||||
bool AppInit(int argc, char* argv[]);
|
||||
bool AppInit2(int argc, char* argv[]);
|
||||
|
||||
@ -1840,7 +1840,7 @@ bool CheckDiskSpace(uint64 nAdditionalBytes)
|
||||
strMiscWarning = strMessage;
|
||||
printf("*** %s\n", strMessage.c_str());
|
||||
ThreadSafeMessageBox(strMessage, "Bitcoin", wxOK | wxICON_EXCLAMATION);
|
||||
CreateThread(Shutdown, NULL);
|
||||
StartShutdown();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
@ -693,7 +693,7 @@ void ThreadSocketHandler2(void* parg)
|
||||
if (nSelect == SOCKET_ERROR)
|
||||
{
|
||||
int nErr = WSAGetLastError();
|
||||
if (hSocketMax > -1)
|
||||
if (hSocketMax != INVALID_SOCKET)
|
||||
{
|
||||
printf("socket select error %d\n", nErr);
|
||||
for (unsigned int i = 0; i <= hSocketMax; i++)
|
||||
@ -1535,7 +1535,7 @@ void ThreadMessageHandler2(void* parg)
|
||||
vnThreadsRunning[THREAD_MESSAGEHANDLER]--;
|
||||
Sleep(100);
|
||||
if (fRequestShutdown)
|
||||
Shutdown(NULL);
|
||||
StartShutdown();
|
||||
vnThreadsRunning[THREAD_MESSAGEHANDLER]++;
|
||||
if (fShutdown)
|
||||
return;
|
||||
|
||||
@ -121,11 +121,6 @@ void AddressBookPage::setModel(AddressTableModel *model)
|
||||
connect(ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
|
||||
this, SLOT(selectionChanged()));
|
||||
|
||||
if(mode == ForSending)
|
||||
{
|
||||
// Auto-select first row when in sending mode
|
||||
ui->tableView->selectRow(0);
|
||||
}
|
||||
selectionChanged();
|
||||
}
|
||||
|
||||
|
||||
@ -123,6 +123,11 @@ void InitMessage(const std::string &message)
|
||||
}
|
||||
}
|
||||
|
||||
void QueueShutdown()
|
||||
{
|
||||
QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
/*
|
||||
Translate string to current locale using Qt.
|
||||
*/
|
||||
@ -290,6 +295,7 @@ int main(int argc, char *argv[])
|
||||
window.hide();
|
||||
guiref = 0;
|
||||
}
|
||||
// Shutdown the core and it's threads, but don't exit Bitcoin-Qt here
|
||||
Shutdown(NULL);
|
||||
}
|
||||
else
|
||||
|
||||
@ -552,16 +552,12 @@ void BitcoinGUI::refreshStatusBar()
|
||||
setNumBlocks(clientModel->getNumBlocks());
|
||||
}
|
||||
|
||||
bool HACK_SHUTDOWN = false;
|
||||
|
||||
void BitcoinGUI::error(const QString &title, const QString &message, bool modal)
|
||||
{
|
||||
// Report errors from network/worker thread
|
||||
if (modal)
|
||||
{
|
||||
QMessageBox::critical(this, title, message, QMessageBox::Ok, QMessageBox::Ok);
|
||||
if (HACK_SHUTDOWN)
|
||||
QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection);
|
||||
} else {
|
||||
notificator->notify(Notificator::Critical, title, message);
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="labelBalance">
|
||||
<property name="text">
|
||||
<string>123.456 BTC</string>
|
||||
<string notr="true">0 BTC</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -72,7 +72,7 @@
|
||||
<item row="3" column="1">
|
||||
<widget class="QLabel" name="labelUnconfirmed">
|
||||
<property name="text">
|
||||
<string>0 BTC</string>
|
||||
<string notr="true">0 BTC</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@ -46,6 +46,7 @@ extern void ThreadSafeHandleURI(const std::string& strURI);
|
||||
extern void CalledSetStatusBar(const std::string& strText, int nField);
|
||||
extern void UIThreadCall(boost::function0<void> fn);
|
||||
extern void MainFrameRepaint();
|
||||
extern void QueueShutdown();
|
||||
extern void InitMessage(const std::string &message);
|
||||
extern std::string _(const char* psz);
|
||||
|
||||
|
||||
@ -26,3 +26,9 @@ void Shutdown(void* parg)
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void StartShutdown()
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
@ -23,6 +23,7 @@ namespace boost {
|
||||
#include <boost/interprocess/sync/interprocess_mutex.hpp>
|
||||
#include <boost/interprocess/sync/interprocess_recursive_mutex.hpp>
|
||||
#include <boost/foreach.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
|
||||
using namespace std;
|
||||
using namespace boost;
|
||||
@ -194,6 +195,8 @@ inline int OutputDebugStringF(const char* pszFormat, ...)
|
||||
if (fileout)
|
||||
{
|
||||
static bool fStartedNewLine = true;
|
||||
static boost::mutex mutexDebugLog;
|
||||
boost::mutex::scoped_lock scoped_lock(mutexDebugLog);
|
||||
|
||||
// Debug print useful for profiling
|
||||
if (fLogTimestamps && fStartedNewLine)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user