|
|
|
|
@@ -43,38 +43,52 @@ 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.
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|