diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs
index 89d7045cbf..5a9385f5d8 100644
--- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs
+++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs
@@ -357,6 +357,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
public void control(uint localID, UUID itemID, UUID agentID, uint held, uint change)
{
+ if ((change == 0) && (myScriptEngine.m_EventQueueManager.CheckEeventQueueForEvent(localID,"control"))) return;
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "control", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLString(agentID.ToString()), new LSL_Types.LSLInteger(held), new LSL_Types.LSLInteger(change)});
}
diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs
index 1a08795238..af7fca3969 100644
--- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs
+++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs
@@ -288,6 +288,31 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
}
}
#endregion
+
+ #region " Check execution queue for a specified Event"
+ ///
+ /// checks to see if a specified event type is already in the queue
+ ///
+ /// Region object ID
+ /// Name of the function, will be state + "_event_" + FunctionName
+ /// true if event is found , false if not found
+ ///
+ public bool CheckEeventQueueForEvent(uint localID, string FunctionName)
+ {
+ if (eventQueue.Count > 0)
+ {
+ lock (eventQueue)
+ {
+ foreach (EventQueueManager.QueueItemStruct QIS in eventQueue)
+ {
+ if ((QIS.functionName == FunctionName) && (QIS.localID == localID))
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ #endregion
#region " Add events to execution queue "
///