diff options
author | Gavin Andresen <gavinandresen@gmail.com> | 2011-08-31 10:24:45 -0700 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2011-08-31 10:24:45 -0700 |
commit | cb6c4b883da6896b39bd46f845453f69d0f516f1 (patch) | |
tree | cc9de8e932d07cf2549a625e6c614a2677ec1b0e /doc | |
parent | 21189a42a735ff66166c17c53eb44998346059d6 (diff) | |
parent | 471426fb3b2c2fa37640c03819c4f7be69ba8301 (diff) |
Merge pull request #480 from gavinandresen/deadlocks
Simplify mutex locking, fix deadlocks. Fixes issue #453
Diffstat (limited to 'doc')
-rw-r--r-- | doc/coding.txt | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/doc/coding.txt b/doc/coding.txt index 4707476697..ec31ccded2 100644 --- a/doc/coding.txt +++ b/doc/coding.txt @@ -39,3 +39,47 @@ v vector or similar list objects map map or multimap
set set or multiset
bn CBigNum
+
+-------------------------
+Locking/mutex usage notes
+
+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.
+
+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.
+
+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).
+
+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.
+
+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.
+
+ThreadRPCServer : Remote procedure call handler, listens on port 8332 for connections and services them.
+
+ThreadBitcoinMiner : Generates bitcoins
+
+ThreadMapPort : Universal plug-and-play startup/shutdown
+
+Shutdown : Does an orderly shutdown of everything
+
+ExitTimeout : Windows-only, sleeps 5 seconds then exits application
|