aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorTeravus Ovares (Dan Olivares)2009-09-09 16:20:19 -0400
committerTeravus Ovares (Dan Olivares)2009-09-09 16:20:19 -0400
commitc605509da3a690d4050c48418111d7f29f7be9b4 (patch)
treee2e76c5e521577c9be9002530d289a4b346f2907 /OpenSim/Region
parentMerge branch 'master' of ssh://MyConnection/var/git/opensim (diff)
downloadopensim-SC_OLD-c605509da3a690d4050c48418111d7f29f7be9b4.zip
opensim-SC_OLD-c605509da3a690d4050c48418111d7f29f7be9b4.tar.gz
opensim-SC_OLD-c605509da3a690d4050c48418111d7f29f7be9b4.tar.bz2
opensim-SC_OLD-c605509da3a690d4050c48418111d7f29f7be9b4.tar.xz
* Lock timers when Calling Start() and Stop() when the Thread Context is murky. This affects Mono only.
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs76
-rw-r--r--OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs6
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs2
4 files changed, 66 insertions, 23 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index dd01780..dd50073 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -581,6 +581,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
581 581
582 private void CloseCleanup(bool shutdownCircuit) 582 private void CloseCleanup(bool shutdownCircuit)
583 { 583 {
584
585
584 m_scene.RemoveClient(AgentId); 586 m_scene.RemoveClient(AgentId);
585 587
586 //m_log.InfoFormat("[CLIENTVIEW] Memory pre GC {0}", System.GC.GetTotalMemory(false)); 588 //m_log.InfoFormat("[CLIENTVIEW] Memory pre GC {0}", System.GC.GetTotalMemory(false));
@@ -592,12 +594,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
592 594
593 Thread.Sleep(2000); 595 Thread.Sleep(2000);
594 596
595 // Shut down timers 597 // Shut down timers. Thread Context of this method is murky. Lock all timers
596 if (m_clientPingTimer.Enabled) m_clientPingTimer.Stop(); 598 if (m_clientPingTimer.Enabled)
597 if (m_avatarTerseUpdateTimer.Enabled) m_avatarTerseUpdateTimer.Stop(); 599 lock (m_clientPingTimer)
598 if (m_primTerseUpdateTimer.Enabled) m_primTerseUpdateTimer.Stop(); 600 m_clientPingTimer.Stop();
599 if (m_primFullUpdateTimer.Enabled) m_primFullUpdateTimer.Stop(); 601 if (m_avatarTerseUpdateTimer.Enabled)
600 if (m_textureRequestTimer.Enabled) m_textureRequestTimer.Stop(); 602 lock (m_avatarTerseUpdateTimer)
603 m_avatarTerseUpdateTimer.Stop();
604 if (m_primTerseUpdateTimer.Enabled)
605 lock (m_primTerseUpdateTimer)
606 m_primTerseUpdateTimer.Stop();
607 if (m_primFullUpdateTimer.Enabled)
608 lock (m_primFullUpdateTimer)
609 m_primFullUpdateTimer.Stop();
610 if (m_textureRequestTimer.Enabled)
611 lock (m_textureRequestTimer)
612 m_textureRequestTimer.Stop();
601 613
602 // This is just to give the client a reasonable chance of 614 // This is just to give the client a reasonable chance of
603 // flushing out all it's packets. There should probably 615 // flushing out all it's packets. There should probably
@@ -676,12 +688,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
676 688
677 public void Stop() 689 public void Stop()
678 { 690 {
679 // Shut down timers 691 // Shut down timers. Thread Context is Murky, lock all timers!
680 if (m_clientPingTimer.Enabled) m_clientPingTimer.Stop(); 692 if (m_clientPingTimer.Enabled)
681 if (m_avatarTerseUpdateTimer.Enabled) m_avatarTerseUpdateTimer.Stop(); 693 lock (m_clientPingTimer)
682 if (m_primTerseUpdateTimer.Enabled) m_primTerseUpdateTimer.Stop(); 694 m_clientPingTimer.Stop();
683 if (m_primFullUpdateTimer.Enabled) m_primFullUpdateTimer.Stop(); 695
684 if (m_textureRequestTimer.Enabled) m_textureRequestTimer.Stop(); 696 if (m_avatarTerseUpdateTimer.Enabled)
697 lock (m_avatarTerseUpdateTimer)
698 m_avatarTerseUpdateTimer.Stop();
699
700 if (m_primTerseUpdateTimer.Enabled)
701 lock (m_primTerseUpdateTimer)
702 m_primTerseUpdateTimer.Stop();
703
704 if (m_primFullUpdateTimer.Enabled)
705 lock (m_primFullUpdateTimer)
706 m_primFullUpdateTimer.Stop();
707
708 if (m_textureRequestTimer.Enabled)
709 lock (m_textureRequestTimer)
710 m_textureRequestTimer.Stop();
685 } 711 }
686 712
687 public void Restart() 713 public void Restart()
@@ -2907,7 +2933,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2907 } 2933 }
2908 else if (m_avatarTerseUpdates.Count == 1) 2934 else if (m_avatarTerseUpdates.Count == 1)
2909 { 2935 {
2910 m_avatarTerseUpdateTimer.Start(); 2936 lock (m_avatarTerseUpdateTimer)
2937 m_avatarTerseUpdateTimer.Start();
2911 } 2938 }
2912 } 2939 }
2913 } 2940 }
@@ -2957,7 +2984,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2957 OutPacket(terse, ThrottleOutPacketType.Task); 2984 OutPacket(terse, ThrottleOutPacketType.Task);
2958 2985
2959 if (m_avatarTerseUpdates.Count == 0) 2986 if (m_avatarTerseUpdates.Count == 0)
2960 m_avatarTerseUpdateTimer.Stop(); 2987 {
2988 lock (m_avatarTerseUpdateTimer)
2989 m_avatarTerseUpdateTimer.Stop();
2990 }
2961 } 2991 }
2962 } 2992 }
2963 2993
@@ -3138,7 +3168,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3138 if (m_imageManager.ProcessImageQueue(m_textureSendLimit, 3168 if (m_imageManager.ProcessImageQueue(m_textureSendLimit,
3139 m_textureDataLimit)) 3169 m_textureDataLimit))
3140 { 3170 {
3141 m_textureRequestTimer.Start(); 3171 lock(m_textureRequestTimer)
3172 m_textureRequestTimer.Start();
3142 } 3173 }
3143 } 3174 }
3144 } 3175 }
@@ -3149,7 +3180,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3149 { 3180 {
3150 if (m_primFullUpdates.Count == 0 && m_primFullUpdateTimer.Enabled) 3181 if (m_primFullUpdates.Count == 0 && m_primFullUpdateTimer.Enabled)
3151 { 3182 {
3152 m_primFullUpdateTimer.Stop(); 3183 lock (m_primFullUpdateTimer)
3184 m_primFullUpdateTimer.Stop();
3153 3185
3154 return; 3186 return;
3155 } 3187 }
@@ -3196,7 +3228,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3196 OutPacket(outPacket, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority); 3228 OutPacket(outPacket, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority);
3197 3229
3198 if (m_primFullUpdates.Count == 0 && m_primFullUpdateTimer.Enabled) 3230 if (m_primFullUpdates.Count == 0 && m_primFullUpdateTimer.Enabled)
3199 m_primFullUpdateTimer.Stop(); 3231 lock (m_primFullUpdateTimer)
3232 m_primFullUpdateTimer.Stop();
3200 } 3233 }
3201 } 3234 }
3202 3235
@@ -3234,7 +3267,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3234 { 3267 {
3235 if (m_primTerseUpdates.Count == 0) 3268 if (m_primTerseUpdates.Count == 0)
3236 { 3269 {
3237 m_primTerseUpdateTimer.Stop(); 3270 lock (m_primTerseUpdateTimer)
3271 m_primTerseUpdateTimer.Stop();
3238 3272
3239 return; 3273 return;
3240 } 3274 }
@@ -3284,7 +3318,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3284 OutPacket(outPacket, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority); 3318 OutPacket(outPacket, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority);
3285 3319
3286 if (m_primTerseUpdates.Count == 0) 3320 if (m_primTerseUpdates.Count == 0)
3287 m_primTerseUpdateTimer.Stop(); 3321 lock (m_primTerseUpdateTimer)
3322 m_primTerseUpdateTimer.Stop();
3288 } 3323 }
3289 } 3324 }
3290 3325
@@ -6586,7 +6621,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
6586 if (m_imageManager != null) 6621 if (m_imageManager != null)
6587 { 6622 {
6588 m_imageManager.EnqueueReq(args); 6623 m_imageManager.EnqueueReq(args);
6589 m_textureRequestTimer.Start(); 6624 lock (m_textureRequestTimer)
6625 m_textureRequestTimer.Start();
6590 } 6626 }
6591 } 6627 }
6592 } 6628 }
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
index 53b8ebc..49b459a 100644
--- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
@@ -160,7 +160,10 @@ namespace Flotsam.RegionModules.AssetCache
160 m_CachCleanTimer.AutoReset = true; 160 m_CachCleanTimer.AutoReset = true;
161 m_CachCleanTimer.Elapsed += CleanupExpiredFiles; 161 m_CachCleanTimer.Elapsed += CleanupExpiredFiles;
162 m_CachCleanTimer.Enabled = true; 162 m_CachCleanTimer.Enabled = true;
163 m_CachCleanTimer.Start(); 163 lock (m_CachCleanTimer)
164 {
165 m_CachCleanTimer.Start();
166 }
164 } 167 }
165 else 168 else
166 { 169 {
diff --git a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
index f8208ec..7ac1e7e 100644
--- a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
+++ b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
@@ -78,7 +78,8 @@ namespace OpenSim.Region.Framework.Scenes
78 bool permissionToDelete) 78 bool permissionToDelete)
79 { 79 {
80 if (Enabled) 80 if (Enabled)
81 m_inventoryTicker.Stop(); 81 lock (m_inventoryTicker)
82 m_inventoryTicker.Stop();
82 83
83 lock (m_inventoryDeletes) 84 lock (m_inventoryDeletes)
84 { 85 {
@@ -93,7 +94,8 @@ namespace OpenSim.Region.Framework.Scenes
93 } 94 }
94 95
95 if (Enabled) 96 if (Enabled)
96 m_inventoryTicker.Start(); 97 lock (m_inventoryTicker)
98 m_inventoryTicker.Start();
97 99
98 // Visually remove it, even if it isnt really gone yet. This means that if we crash before the object 100 // Visually remove it, even if it isnt really gone yet. This means that if we crash before the object
99 // has gone to inventory, it will reappear in the region again on restart instead of being lost. 101 // has gone to inventory, it will reappear in the region again on restart instead of being lost.
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 40e7471..b0d279c 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3762,6 +3762,8 @@ if (m_shape != null) {
3762 lPos = AbsolutePosition; 3762 lPos = AbsolutePosition;
3763 } 3763 }
3764 3764
3765 // Causes this thread to dig into the Client Thread Data.
3766 // Remember your locking here!
3765 remoteClient.SendPrimTerseUpdate(m_regionHandle, 3767 remoteClient.SendPrimTerseUpdate(m_regionHandle,
3766 (ushort)(m_parentGroup.GetTimeDilation() * 3768 (ushort)(m_parentGroup.GetTimeDilation() *
3767 (float)ushort.MaxValue), LocalId, lPos, 3769 (float)ushort.MaxValue), LocalId, lPos,