@@ -1789,6 +1789,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
1789
1789
bool fProcessBLOCKTXN = false ;
1790
1790
CDataStream blockTxnMsg (SER_NETWORK, PROTOCOL_VERSION);
1791
1791
1792
+ // If we end up treating this as a plain headers message, call that as well
1793
+ // without cs_main.
1794
+ bool fRevertToHeaderProcessing = false ;
1795
+ CDataStream vHeadersMsg (SER_NETWORK, PROTOCOL_VERSION);
1796
+
1792
1797
// Keep a CBlock for "optimistic" compactblock reconstructions (see
1793
1798
// below)
1794
1799
std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();
@@ -1913,16 +1918,18 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
1913
1918
// Dirty hack to process as if it were just a headers message (TODO: move message handling into their own functions)
1914
1919
std::vector<CBlock> headers;
1915
1920
headers.push_back (cmpctblock.header );
1916
- CDataStream vHeadersMsg (SER_NETWORK, PROTOCOL_VERSION);
1917
1921
vHeadersMsg << headers;
1918
- return ProcessMessage (pfrom, NetMsgType::HEADERS, vHeadersMsg, nTimeReceived, chainparams, connman) ;
1922
+ fRevertToHeaderProcessing = true ;
1919
1923
}
1920
1924
}
1921
1925
} // cs_main
1922
1926
1923
1927
if (fProcessBLOCKTXN )
1924
1928
return ProcessMessage (pfrom, NetMsgType::BLOCKTXN, blockTxnMsg, nTimeReceived, chainparams, connman);
1925
1929
1930
+ if (fRevertToHeaderProcessing )
1931
+ return ProcessMessage (pfrom, NetMsgType::HEADERS, vHeadersMsg, nTimeReceived, chainparams, connman);
1932
+
1926
1933
if (fBlockReconstructed ) {
1927
1934
// If we got here, we were able to optimistically reconstruct a
1928
1935
// block that is in flight from some other peer.
0 commit comments