aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs
diff options
context:
space:
mode:
authorUbitUmarov2015-11-27 07:38:54 +0000
committerUbitUmarov2015-11-27 07:38:54 +0000
commit3029080d9b47dca7737675876d79d99eb14e385d (patch)
tree922829da34bbd7c765551664f2ad7d5de6d1ffd0 /OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs
parent change threading on GetTexture and GetMesh NonSharable region modules (diff)
downloadopensim-SC_OLD-3029080d9b47dca7737675876d79d99eb14e385d.zip
opensim-SC_OLD-3029080d9b47dca7737675876d79d99eb14e385d.tar.gz
opensim-SC_OLD-3029080d9b47dca7737675876d79d99eb14e385d.tar.bz2
opensim-SC_OLD-3029080d9b47dca7737675876d79d99eb14e385d.tar.xz
change threading on GetTexture and getMesh and WebFetch Modules.
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs68
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 }