aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs26
1 files changed, 18 insertions, 8 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
index 3844b1d..c19428d 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
@@ -83,7 +83,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
83 internal LLPacketThrottle TextureThrottle; 83 internal LLPacketThrottle TextureThrottle;
84 internal LLPacketThrottle TotalThrottle; 84 internal LLPacketThrottle TotalThrottle;
85 85
86 private List<uint> contents = new List<uint>(); 86 private Dictionary<uint,int> contents = new Dictionary<uint, int>();
87 87
88 /// <summary> 88 /// <summary>
89 /// The number of packets in the OutgoingPacketQueue 89 /// The number of packets in the OutgoingPacketQueue
@@ -189,7 +189,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
189 } 189 }
190 190
191 if (item.Sequence != 0) 191 if (item.Sequence != 0)
192 lock (contents) contents.Add(item.Sequence); 192 lock (contents)
193 {
194 if (contents.ContainsKey(item.Sequence))
195 contents[item.Sequence] += 1;
196 else
197 contents.Add(item.Sequence, 1);
198 }
193 199
194 lock (this) 200 lock (this)
195 { 201 {
@@ -243,22 +249,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
243 return item; 249 return item;
244 lock (contents) 250 lock (contents)
245 { 251 {
246 if (contents.Contains(item.Sequence)) 252 if (contents.ContainsKey(item.Sequence))
247 if (contents.Remove(item.Sequence)) 253 {
248 return item; 254 if (contents[item.Sequence] == 1)
255 contents.Remove(item.Sequence);
256 else
257 contents[item.Sequence] -= 1;
258 return item;
259 }
249 } 260 }
250 } 261 }
251 } 262 }
252 263
253 public void Cancel(uint sequence) 264 public void Cancel(uint sequence)
254 { 265 {
255 lock (contents) while (contents.Remove(sequence)) 266 lock (contents) contents.Remove(sequence);
256 ;
257 } 267 }
258 268
259 public bool Contains(uint sequence) 269 public bool Contains(uint sequence)
260 { 270 {
261 lock (contents) return contents.Contains(sequence); 271 lock (contents) return contents.ContainsKey(sequence);
262 } 272 }
263 273
264 public void Flush() 274 public void Flush()