diff --git a/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs b/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs index 727f485c1a..070424153b 100644 --- a/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs +++ b/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs @@ -128,11 +128,10 @@ namespace OpenSim.Groups Dictionary request = ServerUtils.ParseQueryString(body); - if (!request.ContainsKey("METHOD")) + if(!request.Remove("METHOD", out object omethod)) return FailureResult(); - string method = request["METHOD"].ToString(); - request.Remove("METHOD"); + string method = omethod.ToString(); m_log.DebugFormat("[Groups.RobustHGConnector]: {0}", method); switch (method) diff --git a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs index f4e3bbbc56..2b8d034b9e 100755 --- a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs @@ -305,11 +305,8 @@ namespace OpenSim.Region.ClientStack.Linden { lock(dropedResponses) { - if(dropedResponses.Contains(requestID)) - { - dropedResponses.Remove(requestID); + if(dropedResponses.Remove(requestID)) return; - } } } @@ -321,9 +318,8 @@ namespace OpenSim.Region.ClientStack.Linden { lock(dropedResponses) { - if(dropedResponses.Contains(requestID)) + if(dropedResponses.Remove(requestID)) { - dropedResponses.Remove(requestID); ProcessedRequestsCount++; return; } diff --git a/OpenSim/Region/ClientStack/Linden/UDP/PacketPool.cs b/OpenSim/Region/ClientStack/Linden/UDP/PacketPool.cs index a41947b68d..f496248e19 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/PacketPool.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/PacketPool.cs @@ -32,6 +32,7 @@ using OpenMetaverse; using OpenMetaverse.Packets; using log4net; using OpenSim.Framework.Monitoring; +using System.Runtime.InteropServices; namespace OpenSim.Region.ClientStack.LindenUDP { @@ -114,29 +115,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP public Packet GetPacket(PacketType type) { PacketsRequested++; - - Packet packet; - if (!RecyclePackets) return Packet.BuildPacket(type); + Packet packet; lock (pool) { - if (!pool.ContainsKey(type) || pool[type] == null || (pool[type]).Count == 0) + if (!pool.TryGetValue(type, out Stack typePacketsStack) || typePacketsStack == null || typePacketsStack.Count == 0) { -// m_log.DebugFormat("[PACKETPOOL]: Building {0} packet", type); - - // Creating a new packet if we cannot reuse an old package + //m_log.DebugFormat("[PACKETPOOL]: Building {0} packet", type); packet = Packet.BuildPacket(type); } else { -// m_log.DebugFormat("[PACKETPOOL]: Pulling {0} packet", type); + //m_log.DebugFormat("[PACKETPOOL]: Pulling {0} packet", type); // Recycle old packages PacketsReused++; - - packet = pool[type].Pop(); + packet = typePacketsStack.Pop(); } } @@ -199,7 +195,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (!RecyclePackets) return; - bool trypool = false; PacketType type = packet.Type; switch (type) @@ -207,83 +202,33 @@ namespace OpenSim.Region.ClientStack.LindenUDP case PacketType.ObjectUpdate: ObjectUpdatePacket oup = (ObjectUpdatePacket)packet; oup.ObjectData = null; - trypool = true; break; case PacketType.ImprovedTerseObjectUpdate: ImprovedTerseObjectUpdatePacket itoup = (ImprovedTerseObjectUpdatePacket)packet; itoup.ObjectData = null; - trypool = true; break; case PacketType.PacketAck: PacketAckPacket ackup = (PacketAckPacket)packet; ackup.Packets = null; - trypool = true; break; - case PacketType.AgentUpdate: - trypool = true; - break; default: return; } - if(!trypool) - return; - lock (pool) { - if (!pool.ContainsKey(type)) + ref Stack spkt = ref CollectionsMarshal.GetValueRefOrAddDefault(pool, type, out bool exists); + if (exists && spkt.Count < 50) { - pool[type] = new Stack(); + spkt.Push(packet); + return; } - if ((pool[type]).Count < 50) - { -// m_log.DebugFormat("[PACKETPOOL]: Pushing {0} packet", type); - pool[type].Push(packet); - } - } - } - - public T GetDataBlock() where T: new() - { - lock (DataBlocks) - { - BlocksRequested++; - - Stack s; - - if (DataBlocks.TryGetValue(typeof(T), out s)) - { - if (s.Count > 0) - { - BlocksReused++; - return (T)s.Pop(); - } - } - else - { - DataBlocks[typeof(T)] = new Stack(); - } - - return new T(); - } - } - - public void ReturnDataBlock(T block) where T: new() - { - if (block == null) - return; - - lock (DataBlocks) - { - if (!DataBlocks.ContainsKey(typeof(T))) - DataBlocks[typeof(T)] = new Stack(); - - if (DataBlocks[typeof(T)].Count < 50) - DataBlocks[typeof(T)].Push(block); + spkt = new Stack(); + spkt.Push(packet); } } } diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 3f4fe515b1..402996dfd3 100755 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs @@ -450,9 +450,11 @@ namespace OpenSim.Services.LLLoginService // // Authenticate this user // - if (!passwd.StartsWith("$1$")) - passwd = "$1$" + Util.Md5Hash(passwd); - passwd = passwd.Remove(0, 3); //remove $1$ + if (passwd.StartsWith("$1$")) + passwd = passwd[3..]; + else + passwd = Util.Md5Hash(passwd); + string token = m_AuthenticationService.Authenticate(account.PrincipalID, passwd, 30, out UUID realID); UUID secureSession = UUID.Zero; if (string.IsNullOrWhiteSpace(token) || !UUID.TryParse(token, out secureSession))