diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs | 68 |
1 files changed, 38 insertions, 30 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs index 61f4cd0..83f60c7 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs | |||
@@ -102,6 +102,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
102 | private static DoubleQueue<aPollRequest> m_queue = | 102 | private static DoubleQueue<aPollRequest> m_queue = |
103 | new DoubleQueue<aPollRequest>(); | 103 | new DoubleQueue<aPollRequest>(); |
104 | 104 | ||
105 | private static int m_NumberScenes = 0; | ||
106 | |||
105 | #region ISharedRegionModule Members | 107 | #region ISharedRegionModule Members |
106 | 108 | ||
107 | public WebFetchInvDescModule() : this(true) {} | 109 | public WebFetchInvDescModule() : this(true) {} |
@@ -145,17 +147,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
145 | StatsManager.DeregisterStat(s_processedRequestsStat); | 147 | StatsManager.DeregisterStat(s_processedRequestsStat); |
146 | StatsManager.DeregisterStat(s_queuedRequestsStat); | 148 | StatsManager.DeregisterStat(s_queuedRequestsStat); |
147 | 149 | ||
148 | if (ProcessQueuedRequestsAsync) | 150 | m_NumberScenes--; |
149 | { | ||
150 | if (m_workerThreads != null) | ||
151 | { | ||
152 | foreach (Thread t in m_workerThreads) | ||
153 | Watchdog.AbortThread(t.ManagedThreadId); | ||
154 | |||
155 | m_workerThreads = null; | ||
156 | } | ||
157 | } | ||
158 | |||
159 | Scene = null; | 151 | Scene = null; |
160 | } | 152 | } |
161 | 153 | ||
@@ -203,6 +195,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
203 | 195 | ||
204 | Scene.EventManager.OnRegisterCaps += RegisterCaps; | 196 | Scene.EventManager.OnRegisterCaps += RegisterCaps; |
205 | 197 | ||
198 | m_NumberScenes++; | ||
199 | |||
206 | int nworkers = 2; // was 2 | 200 | int nworkers = 2; // was 2 |
207 | if (ProcessQueuedRequestsAsync && m_workerThreads == null) | 201 | if (ProcessQueuedRequestsAsync && m_workerThreads == null) |
208 | { | 202 | { |
@@ -225,7 +219,23 @@ namespace OpenSim.Region.ClientStack.Linden | |||
225 | { | 219 | { |
226 | } | 220 | } |
227 | 221 | ||
228 | public void Close() { } | 222 | public void Close() |
223 | { | ||
224 | if (!m_Enabled) | ||
225 | return; | ||
226 | |||
227 | if (ProcessQueuedRequestsAsync) | ||
228 | { | ||
229 | if (m_NumberScenes <= 0 && m_workerThreads != null) | ||
230 | { | ||
231 | m_log.DebugFormat("[WebFetchInvDescModule] Closing"); | ||
232 | foreach (Thread t in m_workerThreads) | ||
233 | Watchdog.AbortThread(t.ManagedThreadId); | ||
234 | |||
235 | m_workerThreads = null; | ||
236 | } | ||
237 | } | ||
238 | } | ||
229 | 239 | ||
230 | public string Name { get { return "WebFetchInvDescModule"; } } | 240 | public string Name { get { return "WebFetchInvDescModule"; } } |
231 | 241 | ||
@@ -350,6 +360,9 @@ namespace OpenSim.Region.ClientStack.Linden | |||
350 | 360 | ||
351 | public void Process(aPollRequest requestinfo) | 361 | public void Process(aPollRequest requestinfo) |
352 | { | 362 | { |
363 | if(m_module == null || m_module.Scene == null || m_module.Scene.ShuttingDown) | ||
364 | return; | ||
365 | |||
353 | UUID requestID = requestinfo.reqID; | 366 | UUID requestID = requestinfo.reqID; |
354 | 367 | ||
355 | Hashtable response = new Hashtable(); | 368 | Hashtable response = new Hashtable(); |
@@ -425,31 +438,26 @@ namespace OpenSim.Region.ClientStack.Linden | |||
425 | // } | 438 | // } |
426 | // } | 439 | // } |
427 | 440 | ||
428 | private void DoInventoryRequests() | 441 | private static void DoInventoryRequests() |
429 | { | 442 | { |
430 | while (true) | 443 | while (true) |
431 | { | 444 | { |
432 | Watchdog.UpdateThread(); | 445 | Watchdog.UpdateThread(); |
433 | 446 | ||
434 | WaitProcessQueuedInventoryRequest(); | 447 | aPollRequest poolreq = m_queue.Dequeue(); |
435 | } | ||
436 | } | ||
437 | 448 | ||
438 | public void WaitProcessQueuedInventoryRequest() | 449 | if (poolreq != null && poolreq.thepoll != null) |
439 | { | ||
440 | aPollRequest poolreq = m_queue.Dequeue(); | ||
441 | |||
442 | if (poolreq != null && poolreq.thepoll != null) | ||
443 | { | ||
444 | try | ||
445 | { | 450 | { |
446 | poolreq.thepoll.Process(poolreq); | 451 | try |
447 | } | 452 | { |
448 | catch (Exception e) | 453 | poolreq.thepoll.Process(poolreq); |
449 | { | 454 | } |
450 | m_log.ErrorFormat( | 455 | catch (Exception e) |
451 | "[INVENTORY]: Failed to process queued inventory request {0} for {1} in {2}. Exception {3}", | 456 | { |
452 | poolreq.reqID, poolreq.presence != null ? poolreq.presence.Name : "unknown", Scene.Name, e); | 457 | m_log.ErrorFormat( |
458 | "[INVENTORY]: Failed to process queued inventory request {0} for {1}. Exception {3}", | ||
459 | poolreq.reqID, poolreq.presence != null ? poolreq.presence.Name : "unknown", e); | ||
460 | } | ||
453 | } | 461 | } |
454 | } | 462 | } |
455 | } | 463 | } |