From: <sv...@ww...> - 2004-12-18 10:41:15
|
Author: mkrose Date: 2004-12-18 02:41:09 -0800 (Sat, 18 Dec 2004) New Revision: 1402 Modified: trunk/CSP/SimNet/PeerInfo.cpp trunk/CSP/SimNet/PeerInfo.h Log: Lazily allocate the duplicate filter when a PeerInfo is first activated. The previous fixed buffer implementation was wasting about 32 meg (8kb times 4k PeerInfos). Also reduces the inactivity timeout to 15 sec (from 30). Browse at: https://www.zerobar.net/viewcvs/viewcvs.cgi?view=rev&rev=1402 Modified: trunk/CSP/SimNet/PeerInfo.cpp =================================================================== --- trunk/CSP/SimNet/PeerInfo.cpp 2004-12-18 10:36:40 UTC (rev 1401) +++ trunk/CSP/SimNet/PeerInfo.cpp 2004-12-18 10:41:09 UTC (rev 1402) @@ -48,6 +48,7 @@ m_provisional(false), m_lifetime(0.0), m_next_confirmation_id(1000), + m_duplicate_filter(0), m_duplicate_filter_low(true), m_statmode_toggle(false), m_throttle_threshold(0), @@ -78,9 +79,15 @@ m_last_deactivation_time(0.0), m_socket(0) { - memset(m_duplicate_filter, 0, sizeof(m_duplicate_filter)); } +PeerInfo::~PeerInfo() { + if (m_duplicate_filter) { + delete[] m_duplicate_filter; + m_duplicate_filter = 0; + } +} + void PeerInfo::update(double dt, double scale_desired_rate_to_self) { // update time averages with stats from the latest cycle @@ -199,6 +206,10 @@ m_socket->connect(node.getAddress(), node.getPort()); m_total_peer_incoming_bandwidth = incoming; m_total_peer_outgoing_bandwidth = outgoing; + assert(!m_duplicate_filter); + m_duplicate_filter = new simdata::uint32[65536/32]; + assert(m_duplicate_filter); + memset(m_duplicate_filter, 0, 4*65536/32); m_active = true; } @@ -278,6 +289,8 @@ void PeerInfo::disable() { if (m_active) { m_last_deactivation_time = simdata::get_realtime(); + delete[] m_duplicate_filter; + m_duplicate_filter = 0; } m_active = false; if (m_socket.valid()) m_socket->disconnect(); @@ -332,7 +345,7 @@ ni->resend(packet); } bool remove = false; - if (peer->getDeadTime() > 30.0) { + if (peer->getDeadTime() > 15.0) { SIMNET_LOG(PEER, ALERT, "dead time expired for peer " << peer->getId() << " (" << peer->getDeadTime() << " s)"); if (ni->handleDeadPeer(peer)) remove = true; } Modified: trunk/CSP/SimNet/PeerInfo.h =================================================================== --- trunk/CSP/SimNet/PeerInfo.h 2004-12-18 10:36:40 UTC (rev 1401) +++ trunk/CSP/SimNet/PeerInfo.h 2004-12-18 10:41:09 UTC (rev 1402) @@ -73,7 +73,7 @@ ConfirmationId m_next_confirmation_id; - simdata::uint32 m_duplicate_filter[65536/32]; + simdata::uint32 *m_duplicate_filter; bool m_duplicate_filter_low; bool m_statmode_toggle; @@ -172,6 +172,7 @@ public: PeerInfo(); + ~PeerInfo(); /** Initialize the peer id. Can only be called once. */ |