diff options
add locking to internal queue in WebFetchInvDescModule; lack of which caused a random crash in a load test yesterday
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs index 164adeb..4ff617f 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs | |||
@@ -254,10 +254,13 @@ namespace OpenSim.Region.ClientStack.Linden | |||
254 | } | 254 | } |
255 | } | 255 | } |
256 | 256 | ||
257 | if (highPriority) | 257 | lock (m_queue) |
258 | m_queue.EnqueueHigh(reqinfo); | 258 | { |
259 | else | 259 | if (highPriority) |
260 | m_queue.EnqueueLow(reqinfo); | 260 | m_queue.EnqueueHigh(reqinfo); |
261 | else | ||
262 | m_queue.EnqueueLow(reqinfo); | ||
263 | } | ||
261 | }; | 264 | }; |
262 | 265 | ||
263 | NoEvents = (x, y) => | 266 | NoEvents = (x, y) => |
@@ -345,7 +348,9 @@ namespace OpenSim.Region.ClientStack.Linden | |||
345 | { | 348 | { |
346 | Watchdog.UpdateThread(); | 349 | Watchdog.UpdateThread(); |
347 | 350 | ||
348 | aPollRequest poolreq = m_queue.Dequeue(); | 351 | aPollRequest poolreq = null; |
352 | lock (m_queue) | ||
353 | poolreq = m_queue.Dequeue(); | ||
349 | 354 | ||
350 | if (poolreq != null && poolreq.thepoll != null) | 355 | if (poolreq != null && poolreq.thepoll != null) |
351 | poolreq.thepoll.Process(poolreq); | 356 | poolreq.thepoll.Process(poolreq); |