Mercurial > hg > bitcoin
changeset 1278:b805a444bc4e draft
Merge branch 'master' of https://github.com/bitcoin/bitcoin
author | Wladimir J. van der Laan <laanwj@gmail.com> |
---|---|
date | Sat, 03 Sep 2011 09:09:34 +0200 |
parents | e137f9a1aa5b (current diff) 89f344888477 (diff) |
children | a070d6657999 |
files | src/main.cpp src/net.cpp src/serialize.h src/util.cpp |
diffstat | 14 files changed, 57 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/contrib/Bitcoin.app/Contents/Info.plist +++ b/contrib/Bitcoin.app/Contents/Info.plist @@ -17,11 +17,11 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>0.3.25</string> + <string>0.4.00</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>325</string> + <string>400</string> <key>LSMinimumSystemVersion</key> <string>10.5</string> <key>CFBundleIconFile</key>
--- a/doc/README +++ b/doc/README @@ -1,4 +1,4 @@ -Bitcoin 0.3.25 BETA +Bitcoin 0.4.0rc1 BETA Copyright (c) 2009-2011 Bitcoin Developers Distributed under the MIT/X11 software license, see the accompanying
--- a/doc/README_windows.txt +++ b/doc/README_windows.txt @@ -1,4 +1,4 @@ -Bitcoin 0.3.25 BETA +Bitcoin 0.4.00rc1 BETA Copyright (c) 2009-2011 Bitcoin Developers Distributed under the MIT/X11 software license, see the accompanying
--- a/doc/coding.txt +++ b/doc/coding.txt @@ -43,38 +43,52 @@ ------------------------- Locking/mutex usage notes -The code is multi-threaded, and uses mutexes and the CRITICAL_BLOCK/TRY_CRITICAL_BLOCK macros to protect data structures. +The code is multi-threaded, and uses mutexes and the +CRITICAL_BLOCK/TRY_CRITICAL_BLOCK macros to protect data structures. -Deadlocks due to inconsistent lock ordering (thread 1 locks cs_main and then cs_wallet, while thread 2 locks them in the opposite order: result, deadlock as each waits for the other to release its lock) are a problem. Compile with -DDEBUG_LOCKORDER to get lock order inconsistencies reported in the debug.log file. +Deadlocks due to inconsistent lock ordering (thread 1 locks cs_main +and then cs_wallet, while thread 2 locks them in the opposite order: +result, deadlock as each waits for the other to release its lock) are +a problem. Compile with -DDEBUG_LOCKORDER to get lock order +inconsistencies reported in the debug.log file. -Re-architecting the core code so there are better-defined interfaces between the various components is a goal, with any necessary locking done by the components (e.g. see the self-contained CKeyStore class and its cs_KeyStore lock for example). +Re-architecting the core code so there are better-defined interfaces +between the various components is a goal, with any necessary locking +done by the components (e.g. see the self-contained CKeyStore class +and its cs_KeyStore lock for example). ------- Threads StartNode : Starts other threads. -ThreadGetMyExternalIP : Determines outside-the-firewall IP address, sends addr message to connected peers when it determines it. +ThreadGetMyExternalIP : Determines outside-the-firewall IP address, +sends addr message to connected peers when it determines it. -ThreadIRCSeed : Joins IRC bootstrapping channel, watching for new peers and advertising this node's IP address. +ThreadIRCSeed : Joins IRC bootstrapping channel, watching for new +peers and advertising this node's IP address. ThreadSocketHandler : Sends/Receives data from peers on port 8333. -ThreadMessageHandler : Higher-level message handling (sending and receiving). +ThreadMessageHandler : Higher-level message handling (sending and +receiving). ThreadOpenConnections : Initiates new connections to peers. ThreadTopUpKeyPool : replenishes the keystore's keypool. -ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user has unlocked it for a period of time. +ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user +has unlocked it for a period of time. SendingDialogStartTransfer : used by pay-via-ip-address code (obsolete) ThreadDelayedRepaint : repaint the gui -ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms. +ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used +in 500ms. -ThreadRPCServer : Remote procedure call handler, listens on port 8332 for connections and services them. +ThreadRPCServer : Remote procedure call handler, listens on port 8332 +for connections and services them. ThreadBitcoinMiner : Generates bitcoins
--- a/doc/release-process.txt +++ b/doc/release-process.txt @@ -1,6 +1,9 @@ * update (commit) version in sources + src/serialize.h + share/setup.nsi * update (commit) version in OSX app bundle + contrib/Bitcoin.app/Contents/Info.plist * CFBundleShortVersionString should have value like 0.3.23 * CFBundleVersion should have value like 323
index 80354cf764f2d5f8fed28c37097ae575663afe35..8b6e444b66e6b5ad503792de8c4fddcacb212187 GIT binary patch literal 23696 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
index f4d669b4c01b4cda7742b30dc9737d88b8befe43..f60e15bd62177cced9d93e5ffea96faf8e631c19 GIT binary patch literal 15804 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 E1|aG;^#A|>
index c5ae8489fb5ad09d5d68673de6d5fc87cacfe829..836e91d41b63d1dbe5596668e9d7768ac78f4708 GIT binary patch literal 20891 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
index 20e100f578d4effd13e14dfd43061c9b24b2be25..35a3fd7bc96b012d63ebe7bd337ebb6d15e1e883 GIT binary patch literal 15721 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 YT*_3;i;xv5uQ)_M%n(-v7Ji`lFHsQjg#Z8m
--- a/share/setup.nsi +++ b/share/setup.nsi @@ -5,7 +5,7 @@ # General Symbol Definitions !define REGKEY "SOFTWARE\$(^Name)" -!define VERSION 0.3.25 +!define VERSION 0.4.00 !define COMPANY "Bitcoin project" !define URL http://www.bitcoin.org/ @@ -45,13 +45,13 @@ !insertmacro MUI_LANGUAGE English # Installer attributes -OutFile bitcoin-0.3.25-win32-setup.exe +OutFile bitcoin-0.4.00-win32-setup.exe InstallDir $PROGRAMFILES\Bitcoin CRCCheck on XPStyle on BrandingText " " ShowInstDetails show -VIProductVersion 0.3.25.0 +VIProductVersion 0.4.00.0 VIAddVersionKey ProductName Bitcoin VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey CompanyName "${COMPANY}"
--- a/src/main.cpp +++ b/src/main.cpp @@ -1830,7 +1830,9 @@ // Ask the first connected node for block updates static int nAskedForBlocks; - if (!pfrom->fClient && (nAskedForBlocks < 1 || vNodes.size() <= 1)) + if (!pfrom->fClient && + (pfrom->nVersion < 32000 || pfrom->nVersion >= 32400) && + (nAskedForBlocks < 1 || vNodes.size() <= 1)) { nAskedForBlocks++; pfrom->PushGetBlocks(pindexBest, uint256(0));
--- a/src/net.cpp +++ b/src/net.cpp @@ -1349,7 +1349,6 @@ CRITICAL_BLOCK(cs_mapAddresses) { // Add seed nodes if IRC isn't working - static bool fSeedUsed; bool fTOR = (fUseProxy && addrProxy.port == htons(9050)); if (mapAddresses.empty() && (GetTime() - nStart > 60 || fTOR) && !fTestNet) { @@ -1365,35 +1364,6 @@ addr.nTime = GetTime()-GetRand(nOneWeek)-nOneWeek; AddAddress(addr); } - fSeedUsed = true; - } - - if (fSeedUsed && mapAddresses.size() > ARRAYLEN(pnSeed) + 100) - { - // Disconnect seed nodes - set<unsigned int> setSeed(pnSeed, pnSeed + ARRAYLEN(pnSeed)); - static int64 nSeedDisconnected; - if (nSeedDisconnected == 0) - { - nSeedDisconnected = GetTime(); - CRITICAL_BLOCK(cs_vNodes) - BOOST_FOREACH(CNode* pnode, vNodes) - if (setSeed.count(pnode->addr.ip)) - pnode->fDisconnect = true; - } - - // Keep setting timestamps to 0 so they won't reconnect - if (GetTime() - nSeedDisconnected < 60 * 60) - { - BOOST_FOREACH(PAIRTYPE(const vector<unsigned char>, CAddress)& item, mapAddresses) - { - if (setSeed.count(item.second.ip) && item.second.nTime != 0) - { - item.second.nTime = 0; - CAddrDB().WriteAddress(item.second); - } - } - } } }
--- a/src/serialize.h +++ b/src/serialize.h @@ -60,7 +60,7 @@ class CAutoFile; static const unsigned int MAX_SIZE = 0x02000000; -static const int VERSION = 32500; +static const int VERSION = 40000; static const char* pszSubVer = ""; static const bool VERSION_IS_BETA = true;
--- a/src/util.cpp +++ b/src/util.cpp @@ -921,16 +921,22 @@ struct CLockLocation { - std::string mutexName; - std::string sourceFile; - int sourceLine; - CLockLocation(const char* pszName, const char* pszFile, int nLine) { mutexName = pszName; sourceFile = pszFile; sourceLine = nLine; } + + std::string ToString() const + { + return mutexName+" "+sourceFile+":"+itostr(sourceLine); + } + +private: + std::string mutexName; + std::string sourceFile; + int sourceLine; }; typedef std::vector< std::pair<CCriticalSection*, CLockLocation> > LockStack; @@ -948,14 +954,14 @@ { if (i.first == mismatch.first) printf(" (1)"); if (i.first == mismatch.second) printf(" (2)"); - printf(" %s %s:%d\n", i.second.mutexName.c_str(), i.second.sourceFile.c_str(), i.second.sourceLine); + printf(" %s\n", i.second.ToString().c_str()); } printf("Current lock order is:\n"); BOOST_FOREACH(const PAIRTYPE(CCriticalSection*, CLockLocation)& i, s1) { if (i.first == mismatch.first) printf(" (1)"); if (i.first == mismatch.second) printf(" (2)"); - printf(" %s %s:%d\n", i.second.mutexName.c_str(), i.second.sourceFile.c_str(), i.second.sourceLine); + printf(" %s\n", i.second.ToString().c_str()); } } @@ -965,6 +971,7 @@ if (lockstack.get() == NULL) lockstack.reset(new LockStack); + if (fDebug) printf("Locking: %s\n", locklocation.ToString().c_str()); dd_mutex.lock(); (*lockstack).push_back(std::make_pair(c, locklocation)); @@ -990,7 +997,14 @@ static void pop_lock() { + if (fDebug) + { + const CLockLocation& locklocation = (*lockstack).rbegin()->second; + printf("Unlocked: %s\n", locklocation.ToString().c_str()); + } + dd_mutex.lock(); (*lockstack).pop_back(); + dd_mutex.unlock(); } void CCriticalSection::Enter(const char* pszName, const char* pszFile, int nLine)