From b242ceda1e7599a8e71150f3fcc9f27a64d18828 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 13 Dec 2011 20:42:39 +0000 Subject: In AvatarFactoryModule.SetApperance(), perform ValidateBakedTextureCache() in the same thread rather than on another one. The caller is already an async thread from LLClientView so this doesn't hold up the client. However, launching on a separate thread does remove the effect of m_setAppearanceLock This was potentially allowing two different SetAppearance threads to interfere with each other, though this probably rarely happens, if at all. --- OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 6 ++++-- .../Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 7223438..9c86c74 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -575,8 +575,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// Add a handler for the given packet type. /// - /// The packet is handled on its own thread. If packets must be handled in the order in which thye - /// are received then please us ethe synchronous version of this method. + /// + /// The packet is handled on its own thread. If packets must be handled in the order in which thye + /// are received then please use the synchronous version of this method. + /// /// /// /// true if the handler was added. This is currently always the case. diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index f06fb14..29e3580 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs @@ -150,13 +150,13 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory changed = sp.Appearance.SetTextureEntries(textureEntry) || changed; m_log.InfoFormat("[AVFACTORY]: received texture update for {0}", sp.UUID); - Util.FireAndForget(delegate(object o) { ValidateBakedTextureCache(sp, false); }); + ValidateBakedTextureCache(sp, false); // This appears to be set only in the final stage of the appearance // update transaction. In theory, we should be able to do an immediate // appearance send and save here. - } + // save only if there were changes, send no matter what (doesn't hurt to send twice) if (changed) QueueAppearanceSave(sp.ControllingClient.AgentId); -- cgit v1.1