If an agent is logging in, rather than teleporting, make sure all known

circuits for that agent are closed.
avinationmerge
Melanie Thielker 2014-09-23 21:53:09 +02:00
parent 4cc552162e
commit 309cfeff88
2 changed files with 14 additions and 0 deletions

View File

@ -139,6 +139,14 @@ namespace OpenSim.Region.CoreModules.Framework
{ {
Caps oldCaps = m_capsObjects[circuitCode]; 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) // if (capsObjectPath == oldCaps.CapsObjectPath)
// { // {
// m_log.WarnFormat( // m_log.WarnFormat(

View File

@ -3988,6 +3988,12 @@ namespace OpenSim.Region.Framework.Scenes
// We need the circuit data here for some of the subsequent checks. (groups, for example) // We need the circuit data here for some of the subsequent checks. (groups, for example)
// If the checks fail, we remove the circuit. // If the checks fail, we remove the circuit.
acd.teleportFlags = teleportFlags; 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); m_authenticateHandler.AddNewCircuit(acd.circuitcode, acd);
land = LandChannel.GetLandObject(acd.startpos.X, acd.startpos.Y); land = LandChannel.GetLandObject(acd.startpos.X, acd.startpos.Y);