* Lock timers when Calling Start() and Stop() when the Thread Context is murky. This affects Mono only.
parent
f0e2fd426b
commit
c605509da3
|
@ -384,7 +384,10 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
System.Timers.Timer shutdownTimer = new System.Timers.Timer(timeout); // Wait before firing
|
System.Timers.Timer shutdownTimer = new System.Timers.Timer(timeout); // Wait before firing
|
||||||
shutdownTimer.AutoReset = false;
|
shutdownTimer.AutoReset = false;
|
||||||
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
|
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
|
||||||
|
lock (shutdownTimer)
|
||||||
|
{
|
||||||
shutdownTimer.Start();
|
shutdownTimer.Start();
|
||||||
|
}
|
||||||
|
|
||||||
responseData["success"] = true;
|
responseData["success"] = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2177,12 +2177,15 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
|
||||||
watchDog.Interval = interval;
|
watchDog.Interval = interval;
|
||||||
watchDog.AutoReset = false;
|
watchDog.AutoReset = false;
|
||||||
watchDog.Enabled = true;
|
watchDog.Enabled = true;
|
||||||
|
lock (watchDog)
|
||||||
watchDog.Start();
|
watchDog.Start();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void stopWD()
|
internal void stopWD()
|
||||||
{
|
{
|
||||||
Rest.Log.DebugFormat("{0} Reset watchdog", MsgId);
|
Rest.Log.DebugFormat("{0} Reset watchdog", MsgId);
|
||||||
|
lock (watchDog)
|
||||||
watchDog.Stop();
|
watchDog.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,7 @@ namespace OpenSim.Client.MXP
|
||||||
m_ticker.AutoReset = false;
|
m_ticker.AutoReset = false;
|
||||||
m_ticker.Elapsed += ticker_Elapsed;
|
m_ticker.Elapsed += ticker_Elapsed;
|
||||||
|
|
||||||
|
lock (m_ticker)
|
||||||
m_ticker.Start();
|
m_ticker.Start();
|
||||||
|
|
||||||
m_log.Info("[MXP ClientStack] MXP Enabled and Listening");
|
m_log.Info("[MXP ClientStack] MXP Enabled and Listening");
|
||||||
|
@ -99,12 +100,16 @@ namespace OpenSim.Client.MXP
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_shutdown)
|
if (!m_shutdown)
|
||||||
|
{
|
||||||
|
lock (m_ticker)
|
||||||
m_ticker.Start();
|
m_ticker.Start();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
{
|
{
|
||||||
m_shutdown = true;
|
m_shutdown = true;
|
||||||
|
lock (m_ticker)
|
||||||
m_ticker.Stop();
|
m_ticker.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,7 @@ namespace OpenSim.Grid.MessagingServer.Modules
|
||||||
m_messageCore = messageCore;
|
m_messageCore = messageCore;
|
||||||
|
|
||||||
reconnectTimer.Elapsed += registerWithUserServer;
|
reconnectTimer.Elapsed += registerWithUserServer;
|
||||||
|
lock (reconnectTimer)
|
||||||
reconnectTimer.Start();
|
reconnectTimer.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -581,6 +581,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
private void CloseCleanup(bool shutdownCircuit)
|
private void CloseCleanup(bool shutdownCircuit)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
m_scene.RemoveClient(AgentId);
|
m_scene.RemoveClient(AgentId);
|
||||||
|
|
||||||
//m_log.InfoFormat("[CLIENTVIEW] Memory pre GC {0}", System.GC.GetTotalMemory(false));
|
//m_log.InfoFormat("[CLIENTVIEW] Memory pre GC {0}", System.GC.GetTotalMemory(false));
|
||||||
|
@ -592,12 +594,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
Thread.Sleep(2000);
|
Thread.Sleep(2000);
|
||||||
|
|
||||||
// Shut down timers
|
// Shut down timers. Thread Context of this method is murky. Lock all timers
|
||||||
if (m_clientPingTimer.Enabled) m_clientPingTimer.Stop();
|
if (m_clientPingTimer.Enabled)
|
||||||
if (m_avatarTerseUpdateTimer.Enabled) m_avatarTerseUpdateTimer.Stop();
|
lock (m_clientPingTimer)
|
||||||
if (m_primTerseUpdateTimer.Enabled) m_primTerseUpdateTimer.Stop();
|
m_clientPingTimer.Stop();
|
||||||
if (m_primFullUpdateTimer.Enabled) m_primFullUpdateTimer.Stop();
|
if (m_avatarTerseUpdateTimer.Enabled)
|
||||||
if (m_textureRequestTimer.Enabled) m_textureRequestTimer.Stop();
|
lock (m_avatarTerseUpdateTimer)
|
||||||
|
m_avatarTerseUpdateTimer.Stop();
|
||||||
|
if (m_primTerseUpdateTimer.Enabled)
|
||||||
|
lock (m_primTerseUpdateTimer)
|
||||||
|
m_primTerseUpdateTimer.Stop();
|
||||||
|
if (m_primFullUpdateTimer.Enabled)
|
||||||
|
lock (m_primFullUpdateTimer)
|
||||||
|
m_primFullUpdateTimer.Stop();
|
||||||
|
if (m_textureRequestTimer.Enabled)
|
||||||
|
lock (m_textureRequestTimer)
|
||||||
|
m_textureRequestTimer.Stop();
|
||||||
|
|
||||||
// This is just to give the client a reasonable chance of
|
// This is just to give the client a reasonable chance of
|
||||||
// flushing out all it's packets. There should probably
|
// flushing out all it's packets. There should probably
|
||||||
|
@ -676,12 +688,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
public void Stop()
|
public void Stop()
|
||||||
{
|
{
|
||||||
// Shut down timers
|
// Shut down timers. Thread Context is Murky, lock all timers!
|
||||||
if (m_clientPingTimer.Enabled) m_clientPingTimer.Stop();
|
if (m_clientPingTimer.Enabled)
|
||||||
if (m_avatarTerseUpdateTimer.Enabled) m_avatarTerseUpdateTimer.Stop();
|
lock (m_clientPingTimer)
|
||||||
if (m_primTerseUpdateTimer.Enabled) m_primTerseUpdateTimer.Stop();
|
m_clientPingTimer.Stop();
|
||||||
if (m_primFullUpdateTimer.Enabled) m_primFullUpdateTimer.Stop();
|
|
||||||
if (m_textureRequestTimer.Enabled) m_textureRequestTimer.Stop();
|
if (m_avatarTerseUpdateTimer.Enabled)
|
||||||
|
lock (m_avatarTerseUpdateTimer)
|
||||||
|
m_avatarTerseUpdateTimer.Stop();
|
||||||
|
|
||||||
|
if (m_primTerseUpdateTimer.Enabled)
|
||||||
|
lock (m_primTerseUpdateTimer)
|
||||||
|
m_primTerseUpdateTimer.Stop();
|
||||||
|
|
||||||
|
if (m_primFullUpdateTimer.Enabled)
|
||||||
|
lock (m_primFullUpdateTimer)
|
||||||
|
m_primFullUpdateTimer.Stop();
|
||||||
|
|
||||||
|
if (m_textureRequestTimer.Enabled)
|
||||||
|
lock (m_textureRequestTimer)
|
||||||
|
m_textureRequestTimer.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Restart()
|
public void Restart()
|
||||||
|
@ -2907,6 +2933,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
else if (m_avatarTerseUpdates.Count == 1)
|
else if (m_avatarTerseUpdates.Count == 1)
|
||||||
{
|
{
|
||||||
|
lock (m_avatarTerseUpdateTimer)
|
||||||
m_avatarTerseUpdateTimer.Start();
|
m_avatarTerseUpdateTimer.Start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2957,9 +2984,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
OutPacket(terse, ThrottleOutPacketType.Task);
|
OutPacket(terse, ThrottleOutPacketType.Task);
|
||||||
|
|
||||||
if (m_avatarTerseUpdates.Count == 0)
|
if (m_avatarTerseUpdates.Count == 0)
|
||||||
|
{
|
||||||
|
lock (m_avatarTerseUpdateTimer)
|
||||||
m_avatarTerseUpdateTimer.Stop();
|
m_avatarTerseUpdateTimer.Stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations)
|
public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations)
|
||||||
{
|
{
|
||||||
|
@ -3138,6 +3168,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (m_imageManager.ProcessImageQueue(m_textureSendLimit,
|
if (m_imageManager.ProcessImageQueue(m_textureSendLimit,
|
||||||
m_textureDataLimit))
|
m_textureDataLimit))
|
||||||
{
|
{
|
||||||
|
lock(m_textureRequestTimer)
|
||||||
m_textureRequestTimer.Start();
|
m_textureRequestTimer.Start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3149,6 +3180,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
if (m_primFullUpdates.Count == 0 && m_primFullUpdateTimer.Enabled)
|
if (m_primFullUpdates.Count == 0 && m_primFullUpdateTimer.Enabled)
|
||||||
{
|
{
|
||||||
|
lock (m_primFullUpdateTimer)
|
||||||
m_primFullUpdateTimer.Stop();
|
m_primFullUpdateTimer.Stop();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -3196,6 +3228,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
OutPacket(outPacket, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority);
|
OutPacket(outPacket, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority);
|
||||||
|
|
||||||
if (m_primFullUpdates.Count == 0 && m_primFullUpdateTimer.Enabled)
|
if (m_primFullUpdates.Count == 0 && m_primFullUpdateTimer.Enabled)
|
||||||
|
lock (m_primFullUpdateTimer)
|
||||||
m_primFullUpdateTimer.Stop();
|
m_primFullUpdateTimer.Stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3234,6 +3267,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
if (m_primTerseUpdates.Count == 0)
|
if (m_primTerseUpdates.Count == 0)
|
||||||
{
|
{
|
||||||
|
lock (m_primTerseUpdateTimer)
|
||||||
m_primTerseUpdateTimer.Stop();
|
m_primTerseUpdateTimer.Stop();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -3284,6 +3318,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
OutPacket(outPacket, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority);
|
OutPacket(outPacket, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority);
|
||||||
|
|
||||||
if (m_primTerseUpdates.Count == 0)
|
if (m_primTerseUpdates.Count == 0)
|
||||||
|
lock (m_primTerseUpdateTimer)
|
||||||
m_primTerseUpdateTimer.Stop();
|
m_primTerseUpdateTimer.Stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6586,6 +6621,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (m_imageManager != null)
|
if (m_imageManager != null)
|
||||||
{
|
{
|
||||||
m_imageManager.EnqueueReq(args);
|
m_imageManager.EnqueueReq(args);
|
||||||
|
lock (m_textureRequestTimer)
|
||||||
m_textureRequestTimer.Start();
|
m_textureRequestTimer.Start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,8 +160,11 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
m_CachCleanTimer.AutoReset = true;
|
m_CachCleanTimer.AutoReset = true;
|
||||||
m_CachCleanTimer.Elapsed += CleanupExpiredFiles;
|
m_CachCleanTimer.Elapsed += CleanupExpiredFiles;
|
||||||
m_CachCleanTimer.Enabled = true;
|
m_CachCleanTimer.Enabled = true;
|
||||||
|
lock (m_CachCleanTimer)
|
||||||
|
{
|
||||||
m_CachCleanTimer.Start();
|
m_CachCleanTimer.Start();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_CachCleanTimer.Enabled = false;
|
m_CachCleanTimer.Enabled = false;
|
||||||
|
|
|
@ -78,6 +78,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
bool permissionToDelete)
|
bool permissionToDelete)
|
||||||
{
|
{
|
||||||
if (Enabled)
|
if (Enabled)
|
||||||
|
lock (m_inventoryTicker)
|
||||||
m_inventoryTicker.Stop();
|
m_inventoryTicker.Stop();
|
||||||
|
|
||||||
lock (m_inventoryDeletes)
|
lock (m_inventoryDeletes)
|
||||||
|
@ -93,6 +94,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Enabled)
|
if (Enabled)
|
||||||
|
lock (m_inventoryTicker)
|
||||||
m_inventoryTicker.Start();
|
m_inventoryTicker.Start();
|
||||||
|
|
||||||
// Visually remove it, even if it isnt really gone yet. This means that if we crash before the object
|
// Visually remove it, even if it isnt really gone yet. This means that if we crash before the object
|
||||||
|
|
|
@ -3762,6 +3762,8 @@ if (m_shape != null) {
|
||||||
lPos = AbsolutePosition;
|
lPos = AbsolutePosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Causes this thread to dig into the Client Thread Data.
|
||||||
|
// Remember your locking here!
|
||||||
remoteClient.SendPrimTerseUpdate(m_regionHandle,
|
remoteClient.SendPrimTerseUpdate(m_regionHandle,
|
||||||
(ushort)(m_parentGroup.GetTimeDilation() *
|
(ushort)(m_parentGroup.GetTimeDilation() *
|
||||||
(float)ushort.MaxValue), LocalId, lPos,
|
(float)ushort.MaxValue), LocalId, lPos,
|
||||||
|
|
Loading…
Reference in New Issue