From f05f583613850ef480d7be6a74220da0507e8b9b Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Fri, 8 Feb 2008 22:39:08 +0000
Subject: Still chasing logout memory leak. Putting in small changes and
temporary light verbosity to this end
---
OpenSim/Framework/ClientManager.cs | 3 +++
.../Framework/Communications/Cache/AssetTransactions.cs | 17 ++++++++++++-----
OpenSim/Region/ClientStack/ClientView.cs | 12 ++++++++++--
OpenSim/Region/ClientStack/PacketServer.cs | 12 +++++++++---
OpenSim/Region/Environment/Scenes/Scene.cs | 5 ++++-
OpenSim/Region/Environment/Scenes/ScenePresence.cs | 2 +-
6 files changed, 39 insertions(+), 12 deletions(-)
(limited to 'OpenSim')
diff --git a/OpenSim/Framework/ClientManager.cs b/OpenSim/Framework/ClientManager.cs
index 6843dce..064b82d 100644
--- a/OpenSim/Framework/ClientManager.cs
+++ b/OpenSim/Framework/ClientManager.cs
@@ -26,6 +26,7 @@
*
*/
+using System;
using System.Collections.Generic;
using libsecondlife;
using libsecondlife.Packets;
@@ -70,7 +71,9 @@ namespace OpenSim.Framework
public void Remove(uint id)
{
+ //m_log.Info(String.Format("[CLIENT]: Removing client with code {0}, current count {1}", id, m_clients.Count));
m_clients.Remove(id);
+ m_log.Info(String.Format("[CLIENT]: Removed client with code {0}, new client count {1}", id, m_clients.Count));
}
public void Add(uint id, IClientAPI client)
diff --git a/OpenSim/Framework/Communications/Cache/AssetTransactions.cs b/OpenSim/Framework/Communications/Cache/AssetTransactions.cs
index d09e343..4a75f52 100644
--- a/OpenSim/Framework/Communications/Cache/AssetTransactions.cs
+++ b/OpenSim/Framework/Communications/Cache/AssetTransactions.cs
@@ -103,12 +103,22 @@ namespace OpenSim.Framework.Communications.Cache
}
}
+ ///
+ /// Get an uploaded asset. If the data is successfully retrieved, the transaction will be removed.
+ ///
+ ///
+ /// The asset if the upload has completed, null if it has not.
public AssetBase GetTransactionAsset(LLUUID transactionID)
{
if (XferUploaders.ContainsKey(transactionID))
{
- return XferUploaders[transactionID].GetAssetData();
+ AssetXferUploader uploader = XferUploaders[transactionID];
+ AssetBase asset = uploader.GetAssetData();
+ XferUploaders.Remove(transactionID);
+
+ return asset;
}
+
return null;
}
@@ -237,6 +247,7 @@ namespace OpenSim.Framework.Communications.Cache
SaveAssetToFile(filename, Asset.Data);
}
}
+
///Left this in and commented in case there are unforseen issues
//private void SaveAssetToFile(string filename, byte[] data)
//{
@@ -311,10 +322,6 @@ namespace OpenSim.Framework.Communications.Cache
}
}
- public void UpdateInventoryItem(LLUUID itemID)
- {
- }
-
public AssetBase GetAssetData()
{
if (m_finished)
diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs
index 363688f..6f25191 100644
--- a/OpenSim/Region/ClientStack/ClientView.cs
+++ b/OpenSim/Region/ClientStack/ClientView.cs
@@ -53,7 +53,7 @@ namespace OpenSim.Region.ClientStack
{
~ClientView()
{
- m_log.Info("[CLIENTVIEW]: Dstructor called");
+ System.Console.WriteLine("[CLIENTVIEW]: Destructor called");
}
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@@ -237,6 +237,10 @@ namespace OpenSim.Region.ClientStack
private void CloseCleanup()
{
m_scene.RemoveClient(AgentId);
+
+ //m_log.Info(String.Format("[CLIENTVIEW] Memory pre GC {0}", System.GC.GetTotalMemory(false)));
+ //m_log.Info(String.Format("[CLIENTVIEW] Memory post GC {0}", System.GC.GetTotalMemory(true)));
+
// Send the STOP packet
DisableSimulatorPacket disable = (DisableSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.DisableSimulator);
OutPacket(disable, ThrottleOutPacketType.Task);
@@ -264,6 +268,11 @@ namespace OpenSim.Region.ClientStack
m_clientThread.Abort();
}
+ ///
+ /// Close down the client view. This *must* be the last method called, since the last #
+ /// statement of CloseCleanup() aborts the thread.
+ ///
+ ///
public void Close(bool ShutdownCircult)
{
// Pull Client out of Region
@@ -273,7 +282,6 @@ namespace OpenSim.Region.ClientStack
if (ShutdownCircult)
OnConnectionClosed(this);
-
CloseCleanup();
}
diff --git a/OpenSim/Region/ClientStack/PacketServer.cs b/OpenSim/Region/ClientStack/PacketServer.cs
index 9608ce5..7036de93 100644
--- a/OpenSim/Region/ClientStack/PacketServer.cs
+++ b/OpenSim/Region/ClientStack/PacketServer.cs
@@ -25,6 +25,8 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
+
+using System;
using System.Net;
using System.Net.Sockets;
using libsecondlife;
@@ -133,13 +135,17 @@ namespace OpenSim.Region.ClientStack
//m_scene.ClientManager.CloseAllAgents(circuitcode);
}
+ ///
+ /// Completely close down the given client.
+ ///
+ ///
public virtual void CloseClient(IClientAPI client)
{
- //m_log.Info("PacketServer:CloseClient()");
-
+ m_log.Info("PacketServer:CloseClient()");
+
CloseCircuit(client.CircuitCode);
+ m_scene.ClientManager.Remove(client.CircuitCode);
client.Close(false);
- m_scene.ClientManager.Remove(client.CircuitCode);
}
}
}
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 3480530..3fafaf4 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1445,7 +1445,10 @@ namespace OpenSim.Region.Environment.Scenes
}
// Remove client agent from profile, so new logins will work
- CommsManager.UserService.clearUserAgent(agentID);
+ CommsManager.UserService.clearUserAgent(agentID);
+
+ //m_log.Info(String.Format("[SCENE] Memory pre GC {0}", System.GC.GetTotalMemory(false)));
+ //m_log.Info(String.Format("[SCENE] Memory post GC {0}", System.GC.GetTotalMemory(true)));
}
public override void CloseAllAgents(uint circuitcode)
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index 6fae71b..1b9e154 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -41,7 +41,7 @@ namespace OpenSim.Region.Environment.Scenes
{
~ScenePresence()
{
- m_log.Info("[ScenePresence] Destructor called");
+ System.Console.WriteLine("[ScenePresence] Destructor called");
}
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
--
cgit v1.1