remove usage of lludp highpriority send queue. It causes more issues than good
parent
ad6499cc09
commit
54370169bc
|
@ -3594,7 +3594,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
Transfer.TransferInfo.Size = req.AssetInf.Data.Length;
|
Transfer.TransferInfo.Size = req.AssetInf.Data.Length;
|
||||||
Transfer.TransferInfo.TransferID = req.TransferRequestID;
|
Transfer.TransferInfo.TransferID = req.TransferRequestID;
|
||||||
Transfer.Header.Zerocoded = true;
|
Transfer.Header.Zerocoded = true;
|
||||||
OutPacket(Transfer, isWearable ? ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority : ThrottleOutPacketType.Asset);
|
OutPacket(Transfer, ThrottleOutPacketType.Asset);
|
||||||
|
|
||||||
if (req.NumPackets == 1)
|
if (req.NumPackets == 1)
|
||||||
{
|
{
|
||||||
|
@ -3605,7 +3605,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
TransferPacket.TransferData.Data = req.AssetInf.Data;
|
TransferPacket.TransferData.Data = req.AssetInf.Data;
|
||||||
TransferPacket.TransferData.Status = 1;
|
TransferPacket.TransferData.Status = 1;
|
||||||
TransferPacket.Header.Zerocoded = true;
|
TransferPacket.Header.Zerocoded = true;
|
||||||
OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority : ThrottleOutPacketType.Asset);
|
OutPacket(TransferPacket, ThrottleOutPacketType.Asset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3638,7 +3638,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
TransferPacket.TransferData.Status = 1;
|
TransferPacket.TransferData.Status = 1;
|
||||||
}
|
}
|
||||||
TransferPacket.Header.Zerocoded = true;
|
TransferPacket.Header.Zerocoded = true;
|
||||||
OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority : ThrottleOutPacketType.Asset);
|
OutPacket(TransferPacket, ThrottleOutPacketType.Asset);
|
||||||
|
|
||||||
processedLength += chunkSize;
|
processedLength += chunkSize;
|
||||||
packetNumber++;
|
packetNumber++;
|
||||||
|
@ -4435,7 +4435,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OutPacket(aw, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
|
OutPacket(aw, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
static private readonly byte[] AvatarAppearanceHeader = new byte[] {
|
static private readonly byte[] AvatarAppearanceHeader = new byte[] {
|
||||||
|
@ -4487,7 +4487,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
Utils.FloatToBytesSafepos(hover, data, pos); pos += 4;
|
Utils.FloatToBytesSafepos(hover, data, pos); pos += 4;
|
||||||
|
|
||||||
buf.DataLength = pos;
|
buf.DataLength = pos;
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority, null, true);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static private readonly byte[] AvatarAnimationHeader = new byte[] {
|
static private readonly byte[] AvatarAnimationHeader = new byte[] {
|
||||||
|
@ -4562,7 +4562,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
data[pos++] = 0; // no physical avatar events
|
data[pos++] = 0; // no physical avatar events
|
||||||
|
|
||||||
buf.DataLength = pos;
|
buf.DataLength = pos;
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendObjectAnimations(UUID[] animations, int[] seqs, UUID senderId)
|
public void SendObjectAnimations(UUID[] animations, int[] seqs, UUID senderId)
|
||||||
|
@ -4609,17 +4609,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
zc.AddByte(1); // block count
|
zc.AddByte(1); // block count
|
||||||
|
|
||||||
ThrottleOutPacketType ptype = ThrottleOutPacketType.Task;
|
|
||||||
if (ent is ScenePresence)
|
if (ent is ScenePresence)
|
||||||
{
|
|
||||||
CreateAvatarUpdateBlock(ent as ScenePresence, zc);
|
CreateAvatarUpdateBlock(ent as ScenePresence, zc);
|
||||||
ptype |= ThrottleOutPacketType.HighPriority;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
CreatePrimUpdateBlock(ent as SceneObjectPart, (ScenePresence)SceneAgent, zc);
|
CreatePrimUpdateBlock(ent as SceneObjectPart, (ScenePresence)SceneAgent, zc);
|
||||||
|
|
||||||
buf.DataLength = zc.Finish();
|
buf.DataLength = zc.Finish();
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ptype);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendEntityTerseUpdateImmediate(ISceneEntity ent)
|
public void SendEntityTerseUpdateImmediate(ISceneEntity ent)
|
||||||
|
|
|
@ -542,18 +542,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// false if the packet has not been queued and should be sent immediately.
|
/// false if the packet has not been queued and should be sent immediately.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
public bool EnqueueOutgoing(OutgoingPacket packet)
|
public bool EnqueueOutgoing(OutgoingPacket packet)
|
||||||
{
|
|
||||||
return EnqueueOutgoing(packet, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool EnqueueOutgoing(OutgoingPacket packet, bool highPriority)
|
|
||||||
{
|
{
|
||||||
int category = (int)packet.Category;
|
int category = (int)packet.Category;
|
||||||
|
|
||||||
if (category >= 0 && category < m_packetOutboxes.Length)
|
if (category >= 0 && category < m_packetOutboxes.Length)
|
||||||
{
|
{
|
||||||
DoubleLocklessQueue<OutgoingPacket> queue = m_packetOutboxes[category];
|
DoubleLocklessQueue<OutgoingPacket> queue = m_packetOutboxes[category];
|
||||||
queue.Enqueue(packet, highPriority);
|
queue.Enqueue(packet, false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -863,14 +863,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
#region Queue or Send
|
#region Queue or Send
|
||||||
|
|
||||||
bool highPriority = false;
|
|
||||||
|
|
||||||
if (category != ThrottleOutPacketType.Unknown && (category & ThrottleOutPacketType.HighPriority) != 0)
|
|
||||||
{
|
|
||||||
category = (ThrottleOutPacketType)((int)category & 127);
|
|
||||||
highPriority = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category, null);
|
OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category, null);
|
||||||
|
|
||||||
// If we were not provided a method for handling unacked, use the UDPServer default method
|
// If we were not provided a method for handling unacked, use the UDPServer default method
|
||||||
|
@ -880,7 +872,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// If a Linden Lab 1.23.5 client receives an update packet after a kill packet for an object, it will
|
// If a Linden Lab 1.23.5 client receives an update packet after a kill packet for an object, it will
|
||||||
// continue to display the deleted object until relog. Therefore, we need to always queue a kill object
|
// continue to display the deleted object until relog. Therefore, we need to always queue a kill object
|
||||||
// packet so that it isn't sent before a queued update packet.
|
// packet so that it isn't sent before a queued update packet.
|
||||||
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, highPriority))
|
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket))
|
||||||
{
|
{
|
||||||
SendPacketFinal(outgoingPacket);
|
SendPacketFinal(outgoingPacket);
|
||||||
return true;
|
return true;
|
||||||
|
@ -953,44 +945,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
public void SendUDPPacket(
|
public void SendUDPPacket(
|
||||||
LLUDPClient udpClient, UDPPacketBuffer buffer, ThrottleOutPacketType category, UnackedPacketMethod method, bool zerocode)
|
LLUDPClient udpClient, UDPPacketBuffer buffer, ThrottleOutPacketType category, UnackedPacketMethod method, bool zerocode)
|
||||||
{
|
{
|
||||||
bool highPriority = false;
|
|
||||||
|
|
||||||
if (zerocode)
|
if (zerocode)
|
||||||
buffer = ZeroEncode(buffer);
|
buffer = ZeroEncode(buffer);
|
||||||
|
|
||||||
if (category != ThrottleOutPacketType.Unknown && (category & ThrottleOutPacketType.HighPriority) != 0)
|
|
||||||
{
|
|
||||||
category = (ThrottleOutPacketType)((int)category & 127);
|
|
||||||
highPriority = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category, null);
|
OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category, null);
|
||||||
|
|
||||||
// If we were not provided a method for handling unacked, use the UDPServer default method
|
// If we were not provided a method for handling unacked, use the UDPServer default method
|
||||||
if ((outgoingPacket.Buffer.Data[0] & Helpers.MSG_RELIABLE) != 0)
|
if ((outgoingPacket.Buffer.Data[0] & Helpers.MSG_RELIABLE) != 0)
|
||||||
outgoingPacket.UnackedMethod = ((method == null) ? delegate (OutgoingPacket oPacket) { ResendUnacked(oPacket); } : method);
|
outgoingPacket.UnackedMethod = ((method == null) ? delegate (OutgoingPacket oPacket) { ResendUnacked(oPacket); } : method);
|
||||||
|
|
||||||
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, highPriority))
|
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket))
|
||||||
SendPacketFinal(outgoingPacket);
|
SendPacketFinal(outgoingPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendUDPPacket(LLUDPClient udpClient, UDPPacketBuffer buffer, ThrottleOutPacketType category)
|
public void SendUDPPacket(LLUDPClient udpClient, UDPPacketBuffer buffer, ThrottleOutPacketType category)
|
||||||
{
|
{
|
||||||
bool highPriority = false;
|
|
||||||
|
|
||||||
if (category != ThrottleOutPacketType.Unknown && (category & ThrottleOutPacketType.HighPriority) != 0)
|
|
||||||
{
|
|
||||||
category = (ThrottleOutPacketType)((int)category & 127);
|
|
||||||
highPriority = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category, null);
|
OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category, null);
|
||||||
|
|
||||||
// If we were not provided a method for handling unacked, use the UDPServer default method
|
// If we were not provided a method for handling unacked, use the UDPServer default method
|
||||||
if ((outgoingPacket.Buffer.Data[0] & Helpers.MSG_RELIABLE) != 0)
|
if ((outgoingPacket.Buffer.Data[0] & Helpers.MSG_RELIABLE) != 0)
|
||||||
outgoingPacket.UnackedMethod = delegate (OutgoingPacket oPacket) { ResendUnacked(oPacket); };
|
outgoingPacket.UnackedMethod = delegate (OutgoingPacket oPacket) { ResendUnacked(oPacket); };
|
||||||
|
|
||||||
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, highPriority))
|
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket))
|
||||||
SendPacketFinal(outgoingPacket);
|
SendPacketFinal(outgoingPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1136,7 +1112,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// Bump up the resend count on this packet
|
// Bump up the resend count on this packet
|
||||||
Interlocked.Increment(ref outgoingPacket.ResendCount);
|
Interlocked.Increment(ref outgoingPacket.ResendCount);
|
||||||
// Requeue or resend the packet
|
// Requeue or resend the packet
|
||||||
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, false))
|
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket))
|
||||||
SendPacketFinal(outgoingPacket);
|
SendPacketFinal(outgoingPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue