MCPcopy Create free account
hub / github.com/BTCGPU/BTCGPU / ThreadMessageHandler

Method ThreadMessageHandler

src/net.cpp:2026–2073  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2024}
2025
2026void CConnman::ThreadMessageHandler()
2027{
2028 while (!flagInterruptMsgProc)
2029 {
2030 std::vector<CNode*> vNodesCopy;
2031 {
2032 LOCK(cs_vNodes);
2033 vNodesCopy = vNodes;
2034 for (CNode* pnode : vNodesCopy) {
2035 pnode->AddRef();
2036 }
2037 }
2038
2039 bool fMoreWork = false;
2040
2041 for (CNode* pnode : vNodesCopy)
2042 {
2043 if (pnode->fDisconnect)
2044 continue;
2045
2046 // Receive messages
2047 bool fMoreNodeWork = m_msgproc->ProcessMessages(pnode, flagInterruptMsgProc);
2048 fMoreWork |= (fMoreNodeWork && !pnode->fPauseSend);
2049 if (flagInterruptMsgProc)
2050 return;
2051 // Send messages
2052 {
2053 LOCK(pnode->cs_sendProcessing);
2054 m_msgproc->SendMessages(pnode);
2055 }
2056
2057 if (flagInterruptMsgProc)
2058 return;
2059 }
2060
2061 {
2062 LOCK(cs_vNodes);
2063 for (CNode* pnode : vNodesCopy)
2064 pnode->Release();
2065 }
2066
2067 std::unique_lock<std::mutex> lock(mutexMsgProc);
2068 if (!fMoreWork) {
2069 condMsgProc.wait_until(lock, std::chrono::steady_clock::now() + std::chrono::milliseconds(100), [this] { return fMsgProcWake; });
2070 }
2071 fMsgProcWake = false;
2072 }
2073}
2074
2075
2076

Callers

nothing calls this directly

Calls 4

AddRefMethod · 0.80
ProcessMessagesMethod · 0.80
SendMessagesMethod · 0.80
ReleaseMethod · 0.45

Tested by

no test coverage detected