diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2013-03-29 00:43:31 +0100 |
---|---|---|
committer | Pieter Wuille <sipa@ulyssis.org> | 2013-04-04 14:45:45 +0200 |
commit | cedaa714462871213472019545b8e862dacdac91 (patch) | |
tree | 624e3d8ff65f5f2978abe5fa0c7274b8c6c41f47 /src/net.h | |
parent | aaf47eac3abef5741b6c108fdc8a19cb46b773a2 (diff) |
Drop release times for CNode
It seems there were two mechanisms for assessing whether a CNode
was still in use: a refcount and a release timestamp. The latter
seems to have been there for a long time, as a safety mechanism.
However, this timer also keeps CNode objects alive for far longer
than necessary after disconnects, potentially opening up a DoS
window.
This commit removes the timestamp-based mechanism, and replaces
it with an assert(nRefCount >= 0), to verify that the refcounting
is indeed correctly working.
Diffstat (limited to 'src/net.h')
-rw-r--r-- | src/net.h | 17 |
1 files changed, 6 insertions, 11 deletions
@@ -37,7 +37,7 @@ bool GetMyExternalIP(CNetAddr& ipRet); void AddressCurrentlyConnected(const CService& addr); CNode* FindNode(const CNetAddr& ip); CNode* FindNode(const CService& ip); -CNode* ConnectNode(CAddress addrConnect, const char *strDest = NULL, int64 nTimeout=0); +CNode* ConnectNode(CAddress addrConnect, const char *strDest = NULL); void MapPort(bool fUseUPnP); unsigned short GetListenPort(); bool BindListenPort(const CService &bindAddr, std::string& strError=REF(std::string())); @@ -99,7 +99,6 @@ public: int nVersion; std::string strSubVer; bool fInbound; - int64 nReleaseTime; int nStartingHeight; int nMisbehavior; }; @@ -187,8 +186,8 @@ public: CSemaphoreGrant grantOutbound; CCriticalSection cs_filter; CBloomFilter* pfilter; -protected: int nRefCount; +protected: // Denial-of-service detection/prevention // Key is IP address, value is banned-until-time @@ -197,7 +196,6 @@ protected: int nMisbehavior; public: - int64 nReleaseTime; uint256 hashContinue; CBlockIndex* pindexLastGetBlocksBegin; uint256 hashLastGetBlocksEnd; @@ -235,7 +233,6 @@ public: fSuccessfullyConnected = false; fDisconnect = false; nRefCount = 0; - nReleaseTime = 0; nSendSize = 0; nSendOffset = 0; hashContinue = 0; @@ -272,7 +269,8 @@ public: int GetRefCount() { - return std::max(nRefCount, 0) + (GetTime() < nReleaseTime ? 1 : 0); + assert(nRefCount >= 0); + return nRefCount; } // requires LOCK(cs_vRecvMsg) @@ -295,12 +293,9 @@ public: msg.SetVersion(nVersionIn); } - CNode* AddRef(int64 nTimeout=0) + CNode* AddRef() { - if (nTimeout != 0) - nReleaseTime = std::max(nReleaseTime, GetTime() + nTimeout); - else - nRefCount++; + nRefCount++; return this; } |