mantis 8639: recover object selected state in case of lludp object updates packet size overflow;
parent
c54460b6f0
commit
42afa8429e
|
@ -4776,12 +4776,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// because we are requeuing the list of updates. They will be resent in new packets
|
// because we are requeuing the list of updates. They will be resent in new packets
|
||||||
// with the most recent state and priority.
|
// with the most recent state and priority.
|
||||||
m_udpClient.NeedAcks.Remove(oPacket.SequenceNumber);
|
m_udpClient.NeedAcks.Remove(oPacket.SequenceNumber);
|
||||||
|
if(oPacket.Buffer == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_udpClient.FreeUDPBuffer(oPacket.Buffer);
|
||||||
|
|
||||||
// Count this as a resent packet since we are going to requeue all of the updates contained in it
|
// Count this as a resent packet since we are going to requeue all of the updates contained in it
|
||||||
Interlocked.Increment(ref m_udpClient.PacketsResent);
|
Interlocked.Increment(ref m_udpClient.PacketsResent);
|
||||||
|
|
||||||
// We're not going to worry about interlock yet since its not currently critical that this total count
|
|
||||||
// is 100% correct
|
|
||||||
m_udpServer.PacketsResentCount++;
|
m_udpServer.PacketsResentCount++;
|
||||||
|
|
||||||
foreach (EntityUpdate update in updates)
|
foreach (EntityUpdate update in updates)
|
||||||
|
@ -5152,6 +5154,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
int lastzc = 0;
|
int lastzc = 0;
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
bool shouldCreateSelected = false; //mantis 8639
|
||||||
EntityUpdate eu;
|
EntityUpdate eu;
|
||||||
for(int indx = 0; indx < objectUpdates.Count; ++indx)
|
for(int indx = 0; indx < objectUpdates.Count; ++indx)
|
||||||
{
|
{
|
||||||
|
@ -5163,6 +5166,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SceneObjectPart part = (SceneObjectPart)eu.Entity;
|
SceneObjectPart part = (SceneObjectPart)eu.Entity;
|
||||||
|
shouldCreateSelected = part.CreateSelected;
|
||||||
if (eu.Flags.HasFlag(PrimUpdateFlags.Animations))
|
if (eu.Flags.HasFlag(PrimUpdateFlags.Animations))
|
||||||
{
|
{
|
||||||
if (m_SupportObjectAnimations && part.Animations != null)
|
if (m_SupportObjectAnimations && part.Animations != null)
|
||||||
|
@ -5207,7 +5211,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (eu.Entity is ScenePresence)
|
if (eu.Entity is ScenePresence)
|
||||||
CreateAvatarUpdateBlock((ScenePresence)eu.Entity, zc);
|
CreateAvatarUpdateBlock((ScenePresence)eu.Entity, zc);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if(shouldCreateSelected) //mantis 8639 recover selected state
|
||||||
|
((SceneObjectPart)eu.Entity).CreateSelected = true;
|
||||||
CreatePrimUpdateBlock((SceneObjectPart)eu.Entity, mysp, zc);
|
CreatePrimUpdateBlock((SceneObjectPart)eu.Entity, mysp, zc);
|
||||||
|
}
|
||||||
|
|
||||||
tau = new List<EntityUpdate>(30);
|
tau = new List<EntityUpdate>(30);
|
||||||
tau.Add(eu);
|
tau.Add(eu);
|
||||||
|
@ -5314,6 +5322,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
int lastzc = 0;
|
int lastzc = 0;
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
bool shouldCreateSelected = false; //mantis 8639
|
||||||
EntityUpdate eu;
|
EntityUpdate eu;
|
||||||
for (int indx = 0; indx < compressedUpdates.Count; ++indx)
|
for (int indx = 0; indx < compressedUpdates.Count; ++indx)
|
||||||
{
|
{
|
||||||
|
@ -5322,6 +5331,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (sop.ParentGroup == null || sop.ParentGroup.IsDeleted)
|
if (sop.ParentGroup == null || sop.ParentGroup.IsDeleted)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
shouldCreateSelected = sop.CreateSelected;
|
||||||
|
|
||||||
if (eu.Flags.HasFlag(PrimUpdateFlags.Animations))
|
if (eu.Flags.HasFlag(PrimUpdateFlags.Animations))
|
||||||
{
|
{
|
||||||
if (m_SupportObjectAnimations && sop.Animations != null)
|
if (m_SupportObjectAnimations && sop.Animations != null)
|
||||||
|
@ -5369,6 +5380,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
zc.ZeroCount = 0;
|
zc.ZeroCount = 0;
|
||||||
zc.Position = countposition + 1;
|
zc.Position = countposition + 1;
|
||||||
|
|
||||||
|
if (shouldCreateSelected) //mantis 8639 recover selected state
|
||||||
|
sop.CreateSelected = true;
|
||||||
|
|
||||||
// im lazy now, just do last again
|
// im lazy now, just do last again
|
||||||
CreateCompressedUpdateBlockZC(sop, mysp, zc);
|
CreateCompressedUpdateBlockZC(sop, mysp, zc);
|
||||||
tau = new List<EntityUpdate>(30);
|
tau = new List<EntityUpdate>(30);
|
||||||
|
|
Loading…
Reference in New Issue