diff --git a/OpenSim/Framework/AgentCircuitManager.cs b/OpenSim/Framework/AgentCircuitManager.cs index 7a13fa8d00..466483f2bc 100644 --- a/OpenSim/Framework/AgentCircuitManager.cs +++ b/OpenSim/Framework/AgentCircuitManager.cs @@ -95,6 +95,7 @@ namespace OpenSim.Framework public virtual void AddNewCircuit(uint circuitCode, AgentCircuitData agentData) { + agentData.circuitcode = circuitCode; RemoveCircuit(agentData.AgentID); // no duplications m_agentCircuits[circuitCode] = agentData; m_agentCircuitsByUUID[agentData.AgentID] = agentData; diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index cf4e2b1cef..d7abe4721f 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -3114,7 +3114,6 @@ namespace OpenSim.Framework finally { Interlocked.Decrement(ref numRunningThreadFuncs); - threadInfo.Ended(); activeThreads.TryRemove(threadFuncNum, out ThreadInfo dummy); if (loggingEnabled && threadInfo.LogThread) m_log.DebugFormat("Exit threadfunc {0} ({1})", threadFuncNum, FormatDuration(threadInfo.Elapsed())); @@ -3125,7 +3124,7 @@ namespace OpenSim.Framework }; } - long numQueued = Interlocked.Increment(ref numQueuedThreadFuncs); + Interlocked.Increment(ref numQueuedThreadFuncs); try { threadInfo.LogThread = false; diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index 714ef065bc..42068c3adf 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -185,21 +185,23 @@ namespace OpenSim.Region.OptionalModules.World.NPC return UUID.Zero; } - npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0, - int.MaxValue); + agentID = npcAvatar.AgentId; + uint circuit = (uint)Util.RandomClass.Next(0, int.MaxValue); + npcAvatar.CircuitCode = circuit; -// m_log.DebugFormat( -// "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}", -// firstname, lastname, npcAvatar.AgentId, owner, senseAsAgent, position, scene.RegionInfo.RegionName); + //m_log.DebugFormat( + // "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}", + // firstname, lastname, npcAvatar.AgentId, owner, senseAsAgent, position, scene.RegionInfo.RegionName); - AgentCircuitData acd = new AgentCircuitData(); - acd.AgentID = npcAvatar.AgentId; - acd.firstname = firstname; - acd.lastname = lastname; - acd.ServiceURLs = new Dictionary(); - - AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true); - acd.Appearance = npcAppearance; + AgentCircuitData acd = new AgentCircuitData() + { + circuitcode = circuit, + AgentID = agentID, + firstname = firstname, + lastname = lastname, + ServiceURLs = new Dictionary(), + Appearance = new AvatarAppearance(appearance, true) + }; /* for (int i = 0; @@ -212,32 +214,25 @@ namespace OpenSim.Region.OptionalModules.World.NPC } */ -// ManualResetEvent ev = new ManualResetEvent(false); + lock (m_avatars) + { + scene.AuthenticateHandler.AddNewCircuit(acd); + scene.AddNewAgent(npcAvatar, PresenceType.Npc); -// Util.FireAndForget(delegate(object x) { - lock (m_avatars) + if (scene.TryGetScenePresence(agentID, out ScenePresence sp)) { - scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd); - scene.AddNewAgent(npcAvatar, PresenceType.Npc); - - if (scene.TryGetScenePresence(npcAvatar.AgentId, out ScenePresence sp)) - { - npcAvatar.Born = born; - npcAvatar.ActiveGroupId = groupID; - sp.CompleteMovement(npcAvatar, false); - sp.Grouptitle = groupTitle; - m_avatars.Add(npcAvatar.AgentId, npcAvatar); -// m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}", npcAvatar.AgentId, sp.Name); - } + npcAvatar.Born = born; + npcAvatar.ActiveGroupId = groupID; + sp.CompleteMovement(npcAvatar, false); + sp.Grouptitle = groupTitle; + m_avatars.Add(agentID, npcAvatar); + //m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}", npcAvatar.AgentId, sp.Name); } -// ev.Set(); -// }); - -// ev.WaitOne(); + } // m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId); - return npcAvatar.AgentId; + return agentID; } public bool MoveToTarget(UUID agentID, Scene scene, Vector3 pos, @@ -253,10 +248,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC if (sp.IsSatOnObject || sp.SitGround) return false; -// m_log.DebugFormat( -// "[NPC MODULE]: Moving {0} to {1} in {2}, noFly {3}, landAtTarget {4}", -// sp.Name, pos, scene.RegionInfo.RegionName, -// noFly, landAtTarget); + //m_log.DebugFormat( + // "[NPC MODULE]: Moving {0} to {1} in {2}, noFly {3}, landAtTarget {4}", + // sp.Name, pos, scene.RegionInfo.RegionName, + // noFly, landAtTarget); sp.MoveToTarget(pos, noFly, landAtTarget, running);