From b5f6aa6ff271ef3db95570f48bdf0e4a2b775e33 Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Tue, 24 Mar 2009 08:21:50 +0000 Subject: From: Alan Webb Changes to AssetCache and DynamicTextureModule to eliminate opportunities for lost texture updates. --- .../DynamicTexture/DynamicTextureModule.cs | 44 ++++++++++++++++++---- 1 file changed, 37 insertions(+), 7 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs b/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs index b4ec7ae..dedd37f 100644 --- a/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs @@ -66,15 +66,37 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture /// public void ReturnData(UUID id, byte[] data) { - if (Updaters.ContainsKey(id)) + + DynamicTextureUpdater updater = null; + + lock(Updaters) + { + if (Updaters.ContainsKey(id)) + { + updater = Updaters[id]; + } + } + + if(updater != null) { - DynamicTextureUpdater updater = Updaters[id]; if (RegisteredScenes.ContainsKey(updater.SimUUID)) { Scene scene = RegisteredScenes[updater.SimUUID]; updater.DataReceived(data, scene); } } + + if(updater.UpdateTimer == 0) + { + lock(Updaters) + { + if (!Updaters.ContainsKey(updater.UpdaterID)) + { + Updaters.Remove(updater.UpdaterID); + } + } + } + } public UUID AddDynamicTextureURL(UUID simID, UUID primID, string contentType, string url, @@ -101,9 +123,12 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture updater.BlendWithOldTexture = SetBlending; updater.FrontAlpha = AlphaValue; - if (!Updaters.ContainsKey(updater.UpdaterID)) + lock(Updaters) { - Updaters.Add(updater.UpdaterID, updater); + if (!Updaters.ContainsKey(updater.UpdaterID)) + { + Updaters.Add(updater.UpdaterID, updater); + } } RenderPlugins[contentType].AsyncConvertUrl(updater.UpdaterID, url, extraParams); @@ -134,9 +159,12 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture updater.BlendWithOldTexture = SetBlending; updater.FrontAlpha = AlphaValue; - if (!Updaters.ContainsKey(updater.UpdaterID)) + lock(Updaters) { - Updaters.Add(updater.UpdaterID, updater); + if (!Updaters.ContainsKey(updater.UpdaterID)) + { + Updaters.Add(updater.UpdaterID, updater); + } } RenderPlugins[contentType].AsyncConvertData(updater.UpdaterID, data, extraParams); @@ -270,7 +298,6 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture // remove the old asset from the cache UUID oldID = tmptex.DefaultTexture.TextureID; - scene.CommsManager.AssetCache.ExpireAsset(oldID); tmptex.DefaultTexture.TextureID = asset.FullID; // I'm pretty sure we always want to force this to true @@ -278,6 +305,9 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture part.Shape.Textures = tmptex; part.ScheduleFullUpdate(); + + scene.CommsManager.AssetCache.ExpireAsset(oldID); + } private byte[] BlendTextures(byte[] frontImage, byte[] backImage, bool setNewAlpha, byte newAlpha) -- cgit v1.1