The main()
function starts the main bitcoind process thread, usefully named bitcoind
.
All subsequent threads are currently started as children of the bitcoind
thread, although this is not an explicit design requirement.
The Bitcoin Core Developer docs contains a section on threads, which is summarised below in two tables, one for net threads, and one for other threads.
Name | Function | Description |
---|---|---|
|
|
Responsible for starting up and shutting down the application, and spawning all sub-threads |
|
|
Loads blocks from |
|
|
Parallel script validation threads for transactions in blocks |
|
|
Libevent thread to listen for RPC and REST connections |
|
|
HTTP worker threads. Threads to service RPC and REST requests |
|
|
Indexer threads. One thread per indexer |
|
|
Does asynchronous background tasks like dumping wallet contents, dumping |
|
|
Libevent thread for tor connections |
Name | Function | Description |
---|---|---|
|
|
Application level message handling (sending and receiving). Almost all |
|
|
Loads addresses of peers from the |
|
|
Universal plug-and-play startup/shutdown |
|
|
Sends/Receives data from peers on port 8333 |
|
|
Opens network connections to added nodes |
|
|
Initiates new connections to peers |
|
|
Listens for and accepts incoming I2P connections through the I2P SAM proxy |
In order to debug a multi-threaded application like bitcoind using gdb you will need to enable following child processes.
Below is shown the contents of a file threads.brk
which can be sourced into gdb using source threads.brk
, before you start debugging bitcoind.
The file also loads break points where new threads are spawned.
set follow-fork-mode child
break node::ThreadImport
break StartScriptCheckWorkerThreads
break ThreadHTTP
break StartHTTPServer
break ThreadSync
break SingleThreadedSchedulerClient
break TorControlThread
break ThreadMessageHandler
break ThreadDNSAddressSeed
break ThreadMapPort
break ThreadSocketHandler
break ThreadOpenAddedConnections
break ThreadOpenConnections
break ThreadI2PAcceptIncoming