Fix for hanging on "Connecting to region".. caused by packets being processed before the presence has bound to receive events. Fixed this by adding packets to a queue and then processing them when the presence is ready.
parent
ae7c30a0f3
commit
91b1d17e5b
|
@ -819,6 +819,10 @@ namespace OpenSim.Client.MXP.ClientStack
|
||||||
//throw new System.NotImplementedException();
|
//throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ProcessPendingPackets()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void ProcessInPacket(Packet NewPack)
|
public void ProcessInPacket(Packet NewPack)
|
||||||
{
|
{
|
||||||
//throw new System.NotImplementedException();
|
//throw new System.NotImplementedException();
|
||||||
|
|
|
@ -439,6 +439,10 @@ namespace OpenSim.Client.Sirikata.ClientStack
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ProcessPendingPackets()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void ProcessInPacket(Packet NewPack)
|
public void ProcessInPacket(Packet NewPack)
|
||||||
{
|
{
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
|
|
|
@ -445,6 +445,10 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ProcessPendingPackets()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void ProcessInPacket(Packet NewPack)
|
public void ProcessInPacket(Packet NewPack)
|
||||||
{
|
{
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
|
|
|
@ -1112,6 +1112,7 @@ namespace OpenSim.Framework
|
||||||
void SetDebugPacketLevel(int newDebug);
|
void SetDebugPacketLevel(int newDebug);
|
||||||
|
|
||||||
void InPacket(object NewPack);
|
void InPacket(object NewPack);
|
||||||
|
void ProcessPendingPackets();
|
||||||
void ProcessInPacket(Packet NewPack);
|
void ProcessInPacket(Packet NewPack);
|
||||||
void Close();
|
void Close();
|
||||||
void Close(bool sendStop);
|
void Close(bool sendStop);
|
||||||
|
|
|
@ -376,6 +376,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
private AgentUpdateArgs lastarg;
|
private AgentUpdateArgs lastarg;
|
||||||
private bool m_IsActive = true;
|
private bool m_IsActive = true;
|
||||||
private bool m_IsLoggingOut = false;
|
private bool m_IsLoggingOut = false;
|
||||||
|
private bool m_IsPresenceReady = false;
|
||||||
|
|
||||||
protected Dictionary<PacketType, PacketProcessor> m_packetHandlers = new Dictionary<PacketType, PacketProcessor>();
|
protected Dictionary<PacketType, PacketProcessor> m_packetHandlers = new Dictionary<PacketType, PacketProcessor>();
|
||||||
protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers
|
protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers
|
||||||
|
@ -399,6 +400,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
private Timer m_propertiesPacketTimer;
|
private Timer m_propertiesPacketTimer;
|
||||||
private List<ObjectPropertiesPacket.ObjectDataBlock> m_propertiesBlocks = new List<ObjectPropertiesPacket.ObjectDataBlock>();
|
private List<ObjectPropertiesPacket.ObjectDataBlock> m_propertiesBlocks = new List<ObjectPropertiesPacket.ObjectDataBlock>();
|
||||||
|
private List<Packet> m_pendingPackets;
|
||||||
|
|
||||||
#endregion Class Members
|
#endregion Class Members
|
||||||
|
|
||||||
|
@ -439,6 +441,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
get { return m_IsActive; }
|
get { return m_IsActive; }
|
||||||
set { m_IsActive = value; }
|
set { m_IsActive = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsLoggingOut
|
public bool IsLoggingOut
|
||||||
{
|
{
|
||||||
get { return m_IsLoggingOut; }
|
get { return m_IsLoggingOut; }
|
||||||
|
@ -11195,19 +11198,43 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This processes packets which have accumulated while the presence was still in the process of initialising.
|
||||||
|
/// </summary>
|
||||||
|
public void ProcessPendingPackets()
|
||||||
|
{
|
||||||
|
m_IsPresenceReady = true;
|
||||||
|
foreach (Packet p in m_pendingPackets)
|
||||||
|
{
|
||||||
|
ProcessInPacket(p);
|
||||||
|
}
|
||||||
|
m_pendingPackets.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Entryway from the client to the simulator. All UDP packets from the client will end up here
|
/// Entryway from the client to the simulator. All UDP packets from the client will end up here
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="Pack">OpenMetaverse.packet</param>
|
/// <param name="Pack">OpenMetaverse.packet</param>
|
||||||
public void ProcessInPacket(Packet Pack)
|
public void ProcessInPacket(Packet Pack)
|
||||||
{
|
{
|
||||||
if (m_debugPacketLevel >= 255)
|
if (!m_IsPresenceReady)
|
||||||
m_log.DebugFormat("[CLIENT]: Packet IN {0}", Pack.Type);
|
{
|
||||||
|
if (m_pendingPackets == null)
|
||||||
|
{
|
||||||
|
m_pendingPackets = new List<Packet>();
|
||||||
|
}
|
||||||
|
m_pendingPackets.Add(Pack);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_debugPacketLevel >= 255)
|
||||||
|
m_log.DebugFormat("[CLIENT]: Packet IN {0}", Pack.Type);
|
||||||
|
|
||||||
if (!ProcessPacketMethod(Pack))
|
if (!ProcessPacketMethod(Pack))
|
||||||
m_log.Warn("[CLIENT]: unhandled packet " + Pack.Type);
|
m_log.Warn("[CLIENT]: unhandled packet " + Pack.Type);
|
||||||
|
|
||||||
PacketPool.Instance.ReturnPacket(Pack);
|
PacketPool.Instance.ReturnPacket(Pack);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket)
|
private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket)
|
||||||
|
|
|
@ -825,6 +825,10 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ProcessPendingPackets()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void ProcessInPacket(Packet NewPack)
|
public void ProcessInPacket(Packet NewPack)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -715,8 +715,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Request info about all the (root) agents in this region
|
// Request info about all the (root) agents in this region
|
||||||
// Note: This won't send data *to* other clients in that region (children don't send)
|
// Note: This won't send data *to* other clients in that region (children don't send)
|
||||||
SendInitialFullUpdateToAllClients();
|
SendInitialFullUpdateToAllClients();
|
||||||
|
|
||||||
RegisterToEvents();
|
RegisterToEvents();
|
||||||
|
if (m_controllingClient != null)
|
||||||
|
{
|
||||||
|
m_controllingClient.ProcessPendingPackets();
|
||||||
|
}
|
||||||
SetDirectionVectors();
|
SetDirectionVectors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -858,7 +861,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_grouptitle = gm.GetGroupTitle(m_uuid);
|
m_grouptitle = gm.GetGroupTitle(m_uuid);
|
||||||
|
|
||||||
m_rootRegionHandle = m_scene.RegionInfo.RegionHandle;
|
m_rootRegionHandle = m_scene.RegionInfo.RegionHandle;
|
||||||
|
|
||||||
m_scene.SetRootAgentScene(m_uuid);
|
m_scene.SetRootAgentScene(m_uuid);
|
||||||
|
|
||||||
// Moved this from SendInitialData to ensure that m_appearance is initialized
|
// Moved this from SendInitialData to ensure that m_appearance is initialized
|
||||||
|
@ -1173,7 +1175,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
pos.Z = ground + 1.5f;
|
pos.Z = ground + 1.5f;
|
||||||
AbsolutePosition = pos;
|
AbsolutePosition = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_isChildAgent = false;
|
m_isChildAgent = false;
|
||||||
bool m_flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0);
|
bool m_flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0);
|
||||||
MakeRootAgent(AbsolutePosition, m_flying);
|
MakeRootAgent(AbsolutePosition, m_flying);
|
||||||
|
@ -3744,7 +3745,10 @@ Console.WriteLine("Scripted Sit ofset {0}", m_pos);
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
|
|
||||||
RegisterToEvents();
|
RegisterToEvents();
|
||||||
|
if (m_controllingClient != null)
|
||||||
|
{
|
||||||
|
m_controllingClient.ProcessPendingPackets();
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
AbsolutePosition = client.StartPos;
|
AbsolutePosition = client.StartPos;
|
||||||
|
|
||||||
|
|
|
@ -878,6 +878,10 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ProcessPendingPackets()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void ProcessInPacket(Packet NewPack)
|
public void ProcessInPacket(Packet NewPack)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -839,6 +839,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ProcessPendingPackets()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void ProcessInPacket(Packet NewPack)
|
public void ProcessInPacket(Packet NewPack)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -882,6 +882,10 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ProcessPendingPackets()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void ProcessInPacket(Packet NewPack)
|
public void ProcessInPacket(Packet NewPack)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue