From da90da220e72ae08a2819111ce3f4c7746609719 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 12 Jun 2019 01:43:32 +0100 Subject: [PATCH] still a few more changes to lludp Xfer download for lost udp case --- .../CoreModules/Agent/Xfer/XferModule.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/OpenSim/Region/CoreModules/Agent/Xfer/XferModule.cs b/OpenSim/Region/CoreModules/Agent/Xfer/XferModule.cs index dd372636f6..056e78665f 100644 --- a/OpenSim/Region/CoreModules/Agent/Xfer/XferModule.cs +++ b/OpenSim/Region/CoreModules/Agent/Xfer/XferModule.cs @@ -233,7 +233,6 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer public void transfersTimeTick(double now) { XferDownLoad[] xfrs; - int inow = (int)now; lock(Transfers) { if(Transfers.Count == 0) @@ -244,7 +243,7 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer } foreach(XferDownLoad xfr in xfrs) { - if(xfr.checkTime(inow)) + if(xfr.checkTime(now)) { ulong xfrID = xfr.XferID; lock(Transfers) @@ -328,7 +327,7 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer public bool isDeleted = false; private object myLock = new object(); - private int lastACKTimeMS; + private double lastACKTimeMS; private int LastPacket; private int lastBytes; private int lastSentPacket; @@ -389,6 +388,7 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer lastSentPacket = -1; double now = Util.GetTimeStampMS(); + retries = 0; SendBurst(now); return; @@ -428,7 +428,6 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer remoteClient.SendXferPacket(XferID, pktid, Data, pkt << 10, pktsize, true); - retries = 0; lastSentPacket = pkt; } @@ -445,8 +444,10 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer return true; packet &= 0x7fffffff; - if(lastAckPacket < packet) - lastAckPacket = (int)packet; + if(lastAckPacket >= packet) + return false; + + lastAckPacket = (int)packet; if(lastAckPacket == LastPacket) { @@ -463,15 +464,15 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer } } - public bool checkTime(int now) + public bool checkTime(double now) { if (Monitor.TryEnter(myLock)) { if (!isDeleted && !inBurst) { - int timeMS = now - lastACKTimeMS; + double timeMS = now - lastACKTimeMS; - int tout = 5 * remoteClient.PingTimeMS; + double tout = 5 * remoteClient.PingTimeMS; if(tout > 10000) tout = 10000; else if (tout < 500)