aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCory Fields <cory-nospam-@coryfields.com>2016-12-31 02:05:15 -0500
committerCory Fields <cory-nospam-@coryfields.com>2017-01-04 10:10:35 -0500
commit56212e20acf1534d443cb910c9bf3a30f84d0f02 (patch)
tree5c67422a02655f9c919571ac7f07823fddc35f97 /src
parent0e973d970a2114c11f4a95f09721d977da7f0a94 (diff)
downloadbitcoin-56212e20acf1534d443cb910c9bf3a30f84d0f02.tar.xz
net: set message deserialization version when it's actually time to deserialize
We'll soon no longer have access to vRecvMsg, and this is more intuitive anyway.
Diffstat (limited to 'src')
-rw-r--r--src/net.cpp2
-rw-r--r--src/net.h9
-rw-r--r--src/net_processing.cpp1
3 files changed, 7 insertions, 5 deletions
diff --git a/src/net.cpp b/src/net.cpp
index 9ce7475bc5..6d9971a0f1 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -653,7 +653,7 @@ bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes, bool& complete
// get current incomplete message, or create a new one
if (vRecvMsg.empty() ||
vRecvMsg.back().complete())
- vRecvMsg.push_back(CNetMessage(Params().MessageStart(), SER_NETWORK, nRecvVersion));
+ vRecvMsg.push_back(CNetMessage(Params().MessageStart(), SER_NETWORK, INIT_PROTO_VERSION));
CNetMessage& msg = vRecvMsg.back();
diff --git a/src/net.h b/src/net.h
index a11165c7e3..6c12171bf2 100644
--- a/src/net.h
+++ b/src/net.h
@@ -607,7 +607,7 @@ public:
std::list<CNetMessage> vRecvMsg;
CCriticalSection cs_vRecvMsg;
uint64_t nRecvBytes;
- int nRecvVersion;
+ std::atomic<int> nRecvVersion;
int64_t nLastSend;
int64_t nLastRecv;
@@ -747,12 +747,13 @@ public:
// requires LOCK(cs_vRecvMsg)
bool ReceiveMsgBytes(const char *pch, unsigned int nBytes, bool& complete);
- // requires LOCK(cs_vRecvMsg)
void SetRecvVersion(int nVersionIn)
{
nRecvVersion = nVersionIn;
- BOOST_FOREACH(CNetMessage &msg, vRecvMsg)
- msg.SetVersion(nVersionIn);
+ }
+ int GetRecvVersion()
+ {
+ return nRecvVersion;
}
void SetSendVersion(int nVersionIn)
{
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index 3d38995c50..556975d142 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -2485,6 +2485,7 @@ bool ProcessMessages(CNode* pfrom, CConnman& connman, std::atomic<bool>& interru
// at this point, any failure means we can delete the current message
it++;
+ msg.SetVersion(pfrom->GetRecvVersion());
// Scan for message start
if (memcmp(msg.hdr.pchMessageStart, chainparams.MessageStart(), CMessageHeader::MESSAGE_START_SIZE) != 0) {
LogPrintf("PROCESSMESSAGE: INVALID MESSAGESTART %s peer=%d\n", SanitizeString(msg.hdr.GetCommand()), pfrom->id);