aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs45
1 files changed, 24 insertions, 21 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs
index b5a70040..95d9c99 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs
@@ -88,7 +88,7 @@ namespace OpenSim.Region.ClientStack.Linden
88 88
89 private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>(); 89 private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>();
90 private static Thread[] m_workerThreads = null; 90 private static Thread[] m_workerThreads = null;
91 91 private static int m_NumberScenes = 0;
92 private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue = 92 private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue =
93 new OpenMetaverse.BlockingQueue<aPollRequest>(); 93 new OpenMetaverse.BlockingQueue<aPollRequest>();
94 94
@@ -97,13 +97,6 @@ namespace OpenSim.Region.ClientStack.Linden
97 97
98 #region Region Module interfaceBase Members 98 #region Region Module interfaceBase Members
99 99
100 ~GetMeshModule()
101 {
102 foreach (Thread t in m_workerThreads)
103 Watchdog.AbortThread(t.ManagedThreadId);
104
105 }
106
107 public Type ReplaceableInterface 100 public Type ReplaceableInterface
108 { 101 {
109 get { return null; } 102 get { return null; }
@@ -151,7 +144,7 @@ namespace OpenSim.Region.ClientStack.Linden
151 m_scene.EventManager.OnRegisterCaps -= RegisterCaps; 144 m_scene.EventManager.OnRegisterCaps -= RegisterCaps;
152 m_scene.EventManager.OnDeregisterCaps -= DeregisterCaps; 145 m_scene.EventManager.OnDeregisterCaps -= DeregisterCaps;
153 m_scene.EventManager.OnThrottleUpdate -= ThrottleUpdate; 146 m_scene.EventManager.OnThrottleUpdate -= ThrottleUpdate;
154 147 m_NumberScenes--;
155 m_scene = null; 148 m_scene = null;
156 } 149 }
157 150
@@ -167,6 +160,8 @@ namespace OpenSim.Region.ClientStack.Linden
167 m_scene.EventManager.OnDeregisterCaps += DeregisterCaps; 160 m_scene.EventManager.OnDeregisterCaps += DeregisterCaps;
168 m_scene.EventManager.OnThrottleUpdate += ThrottleUpdate; 161 m_scene.EventManager.OnThrottleUpdate += ThrottleUpdate;
169 162
163 m_NumberScenes++;
164
170 if (m_workerThreads == null) 165 if (m_workerThreads == null)
171 { 166 {
172 m_workerThreads = new Thread[2]; 167 m_workerThreads = new Thread[2];
@@ -174,7 +169,7 @@ namespace OpenSim.Region.ClientStack.Linden
174 for (uint i = 0; i < 2; i++) 169 for (uint i = 0; i < 2; i++)
175 { 170 {
176 m_workerThreads[i] = WorkManager.StartThread(DoMeshRequests, 171 m_workerThreads[i] = WorkManager.StartThread(DoMeshRequests,
177 String.Format("MeshWorkerThread{0}", i), 172 String.Format("GetMeshWorker{0}", i),
178 ThreadPriority.Normal, 173 ThreadPriority.Normal,
179 false, 174 false,
180 false, 175 false,
@@ -182,22 +177,29 @@ namespace OpenSim.Region.ClientStack.Linden
182 int.MaxValue); 177 int.MaxValue);
183 } 178 }
184 } 179 }
185
186 } 180 }
187 181
188 182 public void Close()
189 public void Close() { } 183 {
184 if(m_NumberScenes <= 0 && m_workerThreads != null)
185 {
186 m_log.DebugFormat("[GetMeshModule] Closing");
187 foreach (Thread t in m_workerThreads)
188 Watchdog.AbortThread(t.ManagedThreadId);
189 m_queue.Clear();
190 }
191 }
190 192
191 public string Name { get { return "GetMeshModule"; } } 193 public string Name { get { return "GetMeshModule"; } }
192 194
193 #endregion 195 #endregion
194 196
195 private void DoMeshRequests() 197 private static void DoMeshRequests()
196 { 198 {
197 while (true) 199 while(true)
198 { 200 {
199 aPollRequest poolreq = m_queue.Dequeue(); 201 aPollRequest poolreq = m_queue.Dequeue();
200 202 Watchdog.UpdateThread();
201 poolreq.thepoll.Process(poolreq); 203 poolreq.thepoll.Process(poolreq);
202 } 204 }
203 } 205 }
@@ -293,6 +295,9 @@ namespace OpenSim.Region.ClientStack.Linden
293 295
294 UUID requestID = requestinfo.reqID; 296 UUID requestID = requestinfo.reqID;
295 297
298 if(m_scene.ShuttingDown)
299 return;
300
296 // If the avatar is gone, don't bother to get the texture 301 // If the avatar is gone, don't bother to get the texture
297 if (m_scene.GetScenePresence(Id) == null) 302 if (m_scene.GetScenePresence(Id) == null)
298 { 303 {
@@ -386,7 +391,7 @@ namespace OpenSim.Region.ClientStack.Linden
386 private volatile int BytesSent = 0; 391 private volatile int BytesSent = 0;
387 private int Lod3 = 0; 392 private int Lod3 = 0;
388 private int Lod2 = 0; 393 private int Lod2 = 0;
389 private int Lod1 = 0; 394// private int Lod1 = 0;
390 private int UserSetThrottle = 0; 395 private int UserSetThrottle = 0;
391 private int UDPSetThrottle = 0; 396 private int UDPSetThrottle = 0;
392 private int CapSetThrottle = 0; 397 private int CapSetThrottle = 0;
@@ -404,7 +409,6 @@ namespace OpenSim.Region.ClientStack.Linden
404 User = puser; 409 User = puser;
405 } 410 }
406 411
407
408 public bool hasEvents(UUID key, Dictionary<UUID, aPollResponse> responses) 412 public bool hasEvents(UUID key, Dictionary<UUID, aPollResponse> responses)
409 { 413 {
410 const float ThirtyPercent = 0.30f; 414 const float ThirtyPercent = 0.30f;
@@ -486,7 +490,6 @@ namespace OpenSim.Region.ClientStack.Linden
486 PassTime(); 490 PassTime();
487 } 491 }
488 492
489
490 private void PassTime() 493 private void PassTime()
491 { 494 {
492 currenttime = Util.EnvironmentTickCount(); 495 currenttime = Util.EnvironmentTickCount();
@@ -501,10 +504,11 @@ namespace OpenSim.Region.ClientStack.Linden
501 { 504 {
502 Lod3 = 0; 505 Lod3 = 0;
503 Lod2 = 0; 506 Lod2 = 0;
504 Lod1 = 0; 507// Lod1 = 0;
505 } 508 }
506 } 509 }
507 } 510 }
511
508 private void AlterThrottle(int setting, ScenePresence p) 512 private void AlterThrottle(int setting, ScenePresence p)
509 { 513 {
510 p.ControllingClient.SetAgentThrottleSilent((int)Throttle,setting); 514 p.ControllingClient.SetAgentThrottleSilent((int)Throttle,setting);
@@ -534,6 +538,5 @@ namespace OpenSim.Region.ClientStack.Linden
534 538
535 } 539 }
536 } 540 }
537
538 } 541 }
539} 542}