Only send one kill object to the deleter when they derez an object rather than two.
Extend regression test to check this.user_profiles
							parent
							
								
									3290cd09d3
								
							
						
					
					
						commit
						b4a6f2195d
					
				| 
						 | 
					@ -104,14 +104,8 @@ namespace OpenSim.Region.Framework.Scenes
 | 
				
			||||||
            // better than losing the object for now.
 | 
					            // better than losing the object for now.
 | 
				
			||||||
            if (permissionToDelete)
 | 
					            if (permissionToDelete)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                List<uint> killIDs = new List<uint>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                foreach (SceneObjectGroup g in objectGroups)
 | 
					                foreach (SceneObjectGroup g in objectGroups)
 | 
				
			||||||
                {   killIDs.Add(g.LocalId);
 | 
					                    g.DeleteGroupFromScene(false);
 | 
				
			||||||
                    g.DeleteGroupFromScene(true);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                m_scene.SendKillObject(killIDs);
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
| 
						 | 
					@ -160,7 +154,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
				
			||||||
                            if (x.permissionToDelete)
 | 
					                            if (x.permissionToDelete)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                foreach (SceneObjectGroup g in x.objectGroups)
 | 
					                                foreach (SceneObjectGroup g in x.objectGroups)
 | 
				
			||||||
                                    m_scene.DeleteSceneObject(g, false);
 | 
					                                    m_scene.DeleteSceneObject(g, true);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        catch (Exception e)
 | 
					                        catch (Exception e)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,30 +84,31 @@ namespace OpenSim.Region.Framework.Scenes.Tests
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            TestScene scene = new SceneHelpers().SetupScene();
 | 
					            TestScene scene = new SceneHelpers().SetupScene();
 | 
				
			||||||
            SceneHelpers.SetupSceneModules(scene, new PermissionsModule());
 | 
					            SceneHelpers.SetupSceneModules(scene, new PermissionsModule());
 | 
				
			||||||
            IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
 | 
					            TestClient client = (TestClient)SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            // Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
 | 
					            // Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
 | 
				
			||||||
            AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter;
 | 
					            AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter;
 | 
				
			||||||
            sogd.Enabled = false;            
 | 
					            sogd.Enabled = false;            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            SceneObjectPart part
 | 
					            SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, "so1", userId);
 | 
				
			||||||
                = new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero);
 | 
					            uint soLocalId = so.LocalId;
 | 
				
			||||||
            part.Name = "obj1";
 | 
					 | 
				
			||||||
            scene.AddNewSceneObject(new SceneObjectGroup(part), false);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            List<uint> localIds = new List<uint>();
 | 
					            List<uint> localIds = new List<uint>();
 | 
				
			||||||
            localIds.Add(part.LocalId);
 | 
					            localIds.Add(so.LocalId);
 | 
				
			||||||
            scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero);
 | 
					            scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Check that object isn't deleted until we crank the sogd handle.
 | 
					            // Check that object isn't deleted until we crank the sogd handle.
 | 
				
			||||||
            SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
 | 
					            SceneObjectPart retrievedPart = scene.GetSceneObjectPart(so.LocalId);
 | 
				
			||||||
            Assert.That(retrievedPart, Is.Not.Null);
 | 
					            Assert.That(retrievedPart, Is.Not.Null);
 | 
				
			||||||
            Assert.That(retrievedPart.ParentGroup.IsDeleted, Is.False);
 | 
					            Assert.That(retrievedPart.ParentGroup.IsDeleted, Is.False);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sogd.InventoryDeQueueAndDelete();
 | 
					            sogd.InventoryDeQueueAndDelete();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(part.LocalId);
 | 
					            SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(so.LocalId);
 | 
				
			||||||
            Assert.That(retrievedPart2, Is.Null);              
 | 
					            Assert.That(retrievedPart2, Is.Null);              
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Assert.That(client.ReceivedKills.Count, Is.EqualTo(1));
 | 
				
			||||||
 | 
					            Assert.That(client.ReceivedKills[0], Is.EqualTo(soLocalId));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue