diff options
author | lsalzman <[email protected]> | 2013-05-08 10:46:17 +0300 |
---|---|---|
committer | lsalzman <[email protected]> | 2013-05-08 10:46:17 +0300 |
commit | 30d859f9a42900e0717166caefe7986f0e0a75c3 (patch) | |
tree | 678723bb6d21c6d2c540169602b60c8e8e7f7ca1 | |
parent | 27d41dd2ae1d9b43cbf3c282241ef22ddf87242d (diff) | |
download | enet-30d859f9a42900e0717166caefe7986f0e0a75c3.tar.gz enet-30d859f9a42900e0717166caefe7986f0e0a75c3.zip |
avoid some looping in enet_host_bandwidth_throttle
-rw-r--r-- | host.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -334,13 +334,15 @@ enet_host_bandwidth_throttle (ENetHost * host) bandwidth, throttle = 0, bandwidthLimit = 0; - int needsAdjustment; + int needsAdjustment = 0; ENetPeer * peer; ENetProtocol command; if (elapsedTime < ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL) return; + host -> bandwidthThrottleEpoch = timeCurrent; + for (peer = host -> peers; peer < & host -> peers [host -> peerCount]; ++ peer) @@ -348,6 +350,9 @@ enet_host_bandwidth_throttle (ENetHost * host) if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) continue; + if (peer -> incomingBandwidth != 0) + needsAdjustment = 1; + ++ peersTotal; dataTotal += peer -> outgoingDataTotal; } @@ -356,13 +361,17 @@ enet_host_bandwidth_throttle (ENetHost * host) return; peersRemaining = peersTotal; - needsAdjustment = 1; if (host -> outgoingBandwidth == 0) bandwidth = ~0; else bandwidth = (host -> outgoingBandwidth * elapsedTime) / 1000; + if (dataTotal < bandwidth) + throttle = ENET_PEER_PACKET_THROTTLE_SCALE; + else + throttle = (bandwidth * ENET_PEER_PACKET_THROTTLE_SCALE) / dataTotal; + while (peersRemaining > 0 && needsAdjustment != 0) { needsAdjustment = 0; @@ -398,7 +407,6 @@ enet_host_bandwidth_throttle (ENetHost * host) peer -> outgoingBandwidthThrottleEpoch = timeCurrent; - needsAdjustment = 1; -- peersRemaining; bandwidth -= peerBandwidth; @@ -477,8 +485,6 @@ enet_host_bandwidth_throttle (ENetHost * host) } } - host -> bandwidthThrottleEpoch = timeCurrent; - for (peer = host -> peers; peer < & host -> peers [host -> peerCount]; ++ peer) |