diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs | 45 |
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 | } |