* Added removal of TextureSenders and UserTextureDownloadService on agent leaving region.

afrisby
lbsa71 2008-01-03 14:01:53 +00:00
parent 119f9b0d80
commit 7b062cefa2
3 changed files with 34 additions and 5 deletions

View File

@ -49,7 +49,7 @@ namespace OpenSim.Region.Environment.Modules
private readonly BlockingQueue<TextureSender> m_queueSenders = new BlockingQueue<TextureSender>(); private readonly BlockingQueue<TextureSender> m_queueSenders = new BlockingQueue<TextureSender>();
private Dictionary<LLUUID, UserTextureDownloadService> m_userTextureServices = private readonly Dictionary<LLUUID, UserTextureDownloadService> m_userTextureServices =
new Dictionary<LLUUID, UserTextureDownloadService>(); new Dictionary<LLUUID, UserTextureDownloadService>();
private Thread m_thread; private Thread m_thread;
@ -73,6 +73,22 @@ namespace OpenSim.Region.Environment.Modules
m_scenes.Add(scene); m_scenes.Add(scene);
m_scene = scene; m_scene = scene;
m_scene.EventManager.OnNewClient += NewClient; m_scene.EventManager.OnNewClient += NewClient;
m_scene.EventManager.OnRemovePresence += EventManager_OnRemovePresence;
}
}
private void EventManager_OnRemovePresence(LLUUID agentId)
{
UserTextureDownloadService textureService;
lock (m_userTextureServices)
{
if( m_userTextureServices.TryGetValue( agentId, out textureService ))
{
textureService.Close();
m_userTextureServices.Remove(agentId);
}
} }
} }

View File

@ -94,5 +94,18 @@ namespace OpenSim.Region.Environment.Modules
m_sharedSendersQueue.Enqueue(textureSender); m_sharedSendersQueue.Enqueue(textureSender);
} }
} }
internal void Close()
{
lock (m_textureSenders)
{
foreach( TextureSender textureSender in m_textureSenders.Values )
{
textureSender.Cancel = true;
}
m_textureSenders.Clear();
}
}
} }
} }

View File

@ -60,7 +60,7 @@ namespace OpenSim.Region.Environment.Scenes
public event OnNewPresenceDelegate OnNewPresence; public event OnNewPresenceDelegate OnNewPresence;
public delegate void OnRemovePresenceDelegate(LLUUID uuid); public delegate void OnRemovePresenceDelegate(LLUUID agentId);
public event OnRemovePresenceDelegate OnRemovePresence; public event OnRemovePresenceDelegate OnRemovePresence;
@ -165,11 +165,11 @@ namespace OpenSim.Region.Environment.Scenes
OnNewPresence(presence); OnNewPresence(presence);
} }
public void TriggerOnRemovePresence(LLUUID uuid) public void TriggerOnRemovePresence(LLUUID agentId)
{ {
if (OnRemovePresence != null) if (OnRemovePresence != null)
{ {
OnRemovePresence(uuid); OnRemovePresence(agentId);
} }
} }