From efb9b7014e928aa9be8200d18248518bb503ad7c Mon Sep 17 00:00:00 2001 From: Melanie Date: Thu, 4 Oct 2012 15:20:04 +0200 Subject: [PATCH 1/3] Allow default animation to be stopped to be replaced with another one. Fixes Mantis #6327 --- .../Scenes/Animation/AnimationSet.cs | 27 ++++++++++++------- .../Scenes/Animation/ScenePresenceAnimator.cs | 18 ++++++++----- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs b/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs index 33041e9ac7..ad421eeedb 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs @@ -87,7 +87,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation { if (m_defaultAnimation.AnimID == animID) { - ResetDefaultAnimation(); + m_defaultAnimation = new OpenSim.Framework.Animation(UUID.Zero, 1, UUID.Zero); } else if (HasAnimation(animID)) { @@ -149,19 +149,26 @@ namespace OpenSim.Region.Framework.Scenes.Animation { lock (m_animations) { - animIDs = new UUID[m_animations.Count + 1]; - sequenceNums = new int[m_animations.Count + 1]; - objectIDs = new UUID[m_animations.Count + 1]; + int defaultSize = 0; + if (m_defaultAnimation.AnimID != UUID.Zero) + defaultSize++; - animIDs[0] = m_defaultAnimation.AnimID; - sequenceNums[0] = m_defaultAnimation.SequenceNum; - objectIDs[0] = m_defaultAnimation.ObjectID; + animIDs = new UUID[m_animations.Count + defaultSize]; + sequenceNums = new int[m_animations.Count + defaultSize]; + objectIDs = new UUID[m_animations.Count + defaultSize]; + + if (m_defaultAnimation.AnimID != UUID.Zero) + { + animIDs[0] = m_defaultAnimation.AnimID; + sequenceNums[0] = m_defaultAnimation.SequenceNum; + objectIDs[0] = m_defaultAnimation.ObjectID; + } for (int i = 0; i < m_animations.Count; ++i) { - animIDs[i + 1] = m_animations[i].AnimID; - sequenceNums[i + 1] = m_animations[i].SequenceNum; - objectIDs[i + 1] = m_animations[i].ObjectID; + animIDs[i + defaultSize] = m_animations[i].AnimID; + sequenceNums[i + defaultSize] = m_animations[i].SequenceNum; + objectIDs[i + defaultSize] = m_animations[i].ObjectID; } } } diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index 50a176bcfc..9458079209 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs @@ -424,13 +424,19 @@ namespace OpenSim.Region.Framework.Scenes.Animation { lock (m_animations) { - CurrentMovementAnimation = DetermineMovementAnimation(); + string newMovementAnimation = DetermineMovementAnimation(); + if (CurrentMovementAnimation != newMovementAnimation) + { + CurrentMovementAnimation = DetermineMovementAnimation(); -// m_log.DebugFormat( -// "[SCENE PRESENCE ANIMATOR]: Determined animation {0} for {1} in UpdateMovementAnimations()", -// CurrentMovementAnimation, m_scenePresence.Name); +// m_log.DebugFormat( +// "[SCENE PRESENCE ANIMATOR]: Determined animation {0} for {1} in UpdateMovementAnimations()", +// CurrentMovementAnimation, m_scenePresence.Name); - TrySetMovementAnimation(CurrentMovementAnimation); + // Only set it if it's actually changed, give a script + // a chance to stop a default animation + TrySetMovementAnimation(CurrentMovementAnimation); + } } } @@ -552,4 +558,4 @@ namespace OpenSim.Region.Framework.Scenes.Animation SendAnimPack(animIDs, sequenceNums, objectIDs); } } -} \ No newline at end of file +} From d5ea203f934416c4c703ca899c7981b2f5ee550c Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 5 Oct 2012 00:15:55 +0200 Subject: [PATCH 2/3] Fix threading in remote asset connector --- .../Asset/AssetServicesConnector.cs | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs b/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs index 9d6d9ad69c..7f32ad35a2 100644 --- a/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs +++ b/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs @@ -295,25 +295,30 @@ namespace OpenSim.Services.Connectors bool success = false; try { - AsynchronousRestObjectRequester.MakeRequest("GET", uri, 0, - delegate(AssetBase a) - { - if (m_Cache != null) - m_Cache.Cache(a); + AssetBase a = SynchronousRestObjectRequester.MakeRequest("GET", uri, 0, 30); + if (a != null) + { + if (m_Cache != null) + m_Cache.Cache(a); - List handlers; - lock (m_AssetHandlers) + List handlers; + lock (m_AssetHandlers) + { + handlers = m_AssetHandlers[id]; + m_AssetHandlers.Remove(id); + } + foreach (AssetRetrievedEx h in handlers) + { + Util.FireAndForget(x => { - handlers = m_AssetHandlers[id]; - m_AssetHandlers.Remove(id); - } - foreach (AssetRetrievedEx h in handlers) h.Invoke(a); - if (handlers != null) - handlers.Clear(); - }, 30); + }); + } + if (handlers != null) + handlers.Clear(); - success = true; + success = true; + } } finally { @@ -326,7 +331,7 @@ namespace OpenSim.Services.Connectors m_AssetHandlers.Remove(id); } if (handlers != null) - handlers.Clear(); + handlers.Clear(); } } } From db00402fa86db6c3d945a48df13e266506e61486 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 5 Oct 2012 00:14:49 +0100 Subject: [PATCH 3/3] make sure a buffer is closed, and changed a misleading log msg --- OpenSim/Framework/WebUtil.cs | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs index 8094b6dc75..30a8c28072 100644 --- a/OpenSim/Framework/WebUtil.cs +++ b/OpenSim/Framework/WebUtil.cs @@ -706,9 +706,10 @@ namespace OpenSim.Framework // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); int tickstart = Util.EnvironmentTickCount(); - int tickdata = 0; +// int tickdata = 0; + int tickdiff = 0; - // m_log.DebugFormat("[ASYNC REQUEST]: Starting {0} {1}", verb, requestUrl); +// m_log.DebugFormat("[ASYNC REQUEST]: Starting {0} {1}", verb, requestUrl); Type type = typeof(TRequest); @@ -751,8 +752,8 @@ namespace OpenSim.Framework requestStream.Close(); // capture how much time was spent writing - tickdata = Util.EnvironmentTickCountSubtract(tickstart); - + // useless in this async +// tickdata = Util.EnvironmentTickCountSubtract(tickstart); request.BeginGetResponse(delegate(IAsyncResult ar) { response = request.EndGetResponse(ar); @@ -769,7 +770,8 @@ namespace OpenSim.Framework finally { // Let's not close this - //buffer.Close(); + // yes do close it + buffer.Close(); respStream.Close(); response.Close(); } @@ -837,7 +839,6 @@ namespace OpenSim.Framework } // m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString()); - try { action(deserial); @@ -852,9 +853,10 @@ namespace OpenSim.Framework }, null); } - int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); + tickdiff = Util.EnvironmentTickCountSubtract(tickstart); if (tickdiff > WebUtil.LongCallTime) { +/* string originalRequest = null; if (buffer != null) @@ -873,6 +875,13 @@ namespace OpenSim.Framework tickdiff, tickdata, originalRequest); +*/ + m_log.InfoFormat( + "[ASYNC REQUEST]: Slow WebRequest SETUP <{0}> {1} {2} took {3}ms", + reqnum, + verb, + requestUrl, + tickdiff); } } } @@ -903,6 +912,8 @@ namespace OpenSim.Framework request.Method = verb; string respstring = String.Empty; + int tickset = Util.EnvironmentTickCountSubtract(tickstart); + using (MemoryStream buffer = new MemoryStream()) { if ((verb == "POST") || (verb == "PUT")) @@ -979,11 +990,12 @@ namespace OpenSim.Framework int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); if (tickdiff > WebUtil.LongCallTime) m_log.InfoFormat( - "[FORMS]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", + "[FORMS]: Slow request to <{0}> {1} {2} took {3}ms {4}ms writing {5}", reqnum, verb, requestUrl, tickdiff, + tickset, tickdata, obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj);