diff --git a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs index 8aceaa1586..88447f30da 100644 --- a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs +++ b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs @@ -139,6 +139,14 @@ namespace OpenSim.Region.CoreModules.Framework { Caps oldCaps = m_capsObjects[circuitCode]; + // Remove tge handlers. They may conflict with the + // new object created below + oldCaps.DeregisterHandlers(); + + // Better safe ... should not be needed but also + // no big deal + m_capsObjects.Remove(circuitCode); + // if (capsObjectPath == oldCaps.CapsObjectPath) // { // m_log.WarnFormat( diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 087df70a80..8cb795d8bd 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -3988,6 +3988,12 @@ namespace OpenSim.Region.Framework.Scenes // We need the circuit data here for some of the subsequent checks. (groups, for example) // If the checks fail, we remove the circuit. acd.teleportFlags = teleportFlags; + + // Remove any preexisting circuit - we don't want duplicates + // This is a stab at preventing avatar "ghosting" + if (vialogin) + m_authenticateHandler.RemoveCircuit(acd.AgentID); + m_authenticateHandler.AddNewCircuit(acd.circuitcode, acd); land = LandChannel.GetLandObject(acd.startpos.X, acd.startpos.Y);