diff options
author | sfan5 <sfan5@live.de> | 2021-10-10 21:10:52 +0200 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2021-10-19 19:23:00 +0100 |
commit | c3f7905d82e5b1201d81378dedde746caf0e2451 (patch) | |
tree | 0932018ea5c1faee7d2e89f8afad33afaa495084 | |
parent | 05b54a8d18051a3452c405f58bee5852f3d3a27b (diff) | |
download | minetest-c3f7905d82e5b1201d81378dedde746caf0e2451.tar.gz minetest-c3f7905d82e5b1201d81378dedde746caf0e2451.tar.bz2 minetest-c3f7905d82e5b1201d81378dedde746caf0e2451.zip |
Remove broken timeout behaviour
Code that relies on `resend_count` was added in 7ea4a03 and 247a1eb, but never worked.
This was fixed in #11607 which caused the problem to surface.
Hence undo the first commit entirely and change the logic of the second.
-rw-r--r-- | src/network/connectionthreads.cpp | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/src/network/connectionthreads.cpp b/src/network/connectionthreads.cpp index 47678dac5..a306ced9b 100644 --- a/src/network/connectionthreads.cpp +++ b/src/network/connectionthreads.cpp @@ -48,9 +48,6 @@ std::mutex log_conthread_mutex; #undef DEBUG_CONNECTION_KBPS #endif -/* maximum number of retries for reliable packets */ -#define MAX_RELIABLE_RETRY 5 - #define WINDOW_SIZE 5 static session_t readPeerId(u8 *packetdata) @@ -212,7 +209,6 @@ void ConnectionSendThread::runTimeouts(float dtime) } float resend_timeout = udpPeer->getResendTimeout(); - bool retry_count_exceeded = false; for (Channel &channel : udpPeer->channels) { // Remove timed out incomplete unreliable split packets @@ -231,24 +227,16 @@ void ConnectionSendThread::runTimeouts(float dtime) m_iteration_packets_avaialble -= timed_outs.size(); for (const auto &k : timed_outs) { - session_t peer_id = readPeerId(*k.data); u8 channelnum = readChannel(*k.data); u16 seqnum = readU16(&(k.data[BASE_HEADER_SIZE + 1])); channel.UpdateBytesLost(k.data.getSize()); - if (k.resend_count > MAX_RELIABLE_RETRY) { - retry_count_exceeded = true; - timeouted_peers.push_back(peer->id); - /* no need to check additional packets if a single one did timeout*/ - break; - } - LOG(derr_con << m_connection->getDesc() << "RE-SENDING timed-out RELIABLE to " << k.address.serializeString() << "(t/o=" << resend_timeout << "): " - << "from_peer_id=" << peer_id + << "count=" << k.resend_count << ", channel=" << ((int) channelnum & 0xff) << ", seqnum=" << seqnum << std::endl); @@ -259,17 +247,9 @@ void ConnectionSendThread::runTimeouts(float dtime) // lost or really takes more time to transmit } - if (retry_count_exceeded) { - break; /* no need to check other channels if we already did timeout */ - } - channel.UpdateTimers(dtime); } - /* skip to next peer if we did timeout */ - if (retry_count_exceeded) - continue; - /* send ping if necessary */ if (udpPeer->Ping(dtime, data)) { LOG(dout_con << m_connection->getDesc() @@ -1153,8 +1133,8 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan try { BufferedPacket p = channel->outgoing_reliables_sent.popSeqnum(seqnum); - // only calculate rtt from straight sent packets - if (p.resend_count == 0) { + // the rtt calculation will be a bit off for re-sent packets but that's okay + { // Get round trip time u64 current_time = porting::getTimeMs(); @@ -1174,6 +1154,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan dynamic_cast<UDPPeer *>(peer)->reportRTT(rtt); } } + // put bytes for max bandwidth calculation channel->UpdateBytesSent(p.data.getSize(), 1); if (channel->outgoing_reliables_sent.size() == 0) |