* Don't abort (and keep failing) the update if one Entity gives us an exception when we try to update it

* This doesn't remove bug 757, but does largely remove the worst consequences
0.6.0-stable
Justin Clarke Casey 2008-03-12 18:11:08 +00:00
parent c310f2ab24
commit b9ef6ed047
2 changed files with 44 additions and 31 deletions

View File

@ -217,13 +217,26 @@ namespace OpenSim.Region.Environment.Scenes
} }
} }
/// <summary>
/// Process all pending updates
/// </summary>
internal void ProcessUpdates() internal void ProcessUpdates()
{ {
lock (m_updateList) lock (m_updateList)
{ {
for (int i = 0; i < m_updateList.Count; i++) for (int i = 0; i < m_updateList.Count; i++)
{ {
m_updateList[i].Update(); EntityBase entity = m_updateList[i];
// Don't abort the whole update if one entity happens to give us an exception.
try
{
m_updateList[i].Update();
}
catch (Exception e)
{
m_log.ErrorFormat("[INNERSCENE]: Failed to update {0}, {1} - {2}", entity.Name, entity.m_uuid, e);
}
} }
m_updateList.Clear(); m_updateList.Clear();
} }

View File

@ -724,34 +724,34 @@ namespace OpenSim.Region.Environment.Scenes
if (Region_Status != RegionStatus.SlaveScene) if (Region_Status != RegionStatus.SlaveScene)
{ {
if (m_frame % m_update_events == 0) if (m_frame % m_update_events == 0)
UpdateEvents(); UpdateEvents();
if (m_frame % m_update_backup == 0) if (m_frame % m_update_backup == 0)
UpdateStorageBackup(); UpdateStorageBackup();
if (m_frame % m_update_terrain == 0) if (m_frame % m_update_terrain == 0)
UpdateTerrain(); UpdateTerrain();
if (m_frame % m_update_land == 0) if (m_frame % m_update_land == 0)
UpdateLand(); UpdateLand();
otherMS = System.Environment.TickCount - otherMS; otherMS = System.Environment.TickCount - otherMS;
// if (m_frame%m_update_avatars == 0) // if (m_frame%m_update_avatars == 0)
// UpdateInWorldTime(); // UpdateInWorldTime();
m_statsReporter.AddPhysicsFPS(physicsFPS); m_statsReporter.AddPhysicsFPS(physicsFPS);
m_statsReporter.AddTimeDilation(m_timedilation); m_statsReporter.AddTimeDilation(m_timedilation);
m_statsReporter.AddFPS(1); m_statsReporter.AddFPS(1);
m_statsReporter.AddInPackets(0); m_statsReporter.AddInPackets(0);
m_statsReporter.SetRootAgents(m_innerScene.GetRootAgentCount()); m_statsReporter.SetRootAgents(m_innerScene.GetRootAgentCount());
m_statsReporter.SetChildAgents(m_innerScene.GetChildAgentCount()); m_statsReporter.SetChildAgents(m_innerScene.GetChildAgentCount());
m_statsReporter.SetObjects(m_innerScene.GetTotalObjects()); m_statsReporter.SetObjects(m_innerScene.GetTotalObjects());
m_statsReporter.SetActiveObjects(m_innerScene.GetActiveObjects()); m_statsReporter.SetActiveObjects(m_innerScene.GetActiveObjects());
frameMS = System.Environment.TickCount - frameMS; frameMS = System.Environment.TickCount - frameMS;
m_statsReporter.addFrameMS(frameMS); m_statsReporter.addFrameMS(frameMS);
m_statsReporter.addPhysicsMS(physicsMS); m_statsReporter.addPhysicsMS(physicsMS);
m_statsReporter.addOtherMS(otherMS); m_statsReporter.addOtherMS(otherMS);
m_statsReporter.SetActiveScripts(m_innerScene.GetActiveScripts()); m_statsReporter.SetActiveScripts(m_innerScene.GetActiveScripts());
m_statsReporter.addScriptLines(m_innerScene.GetScriptLPS()); m_statsReporter.addScriptLines(m_innerScene.GetScriptLPS());
} }
} }
catch (NotImplementedException) catch (NotImplementedException)
@ -1288,7 +1288,7 @@ namespace OpenSim.Region.Environment.Scenes
if (m_restorePresences.ContainsKey(client.AgentId)) if (m_restorePresences.ContainsKey(client.AgentId))
{ {
m_log.Info("REGION Restore Scene Presence"); m_log.Info("[REGION]: Restore Scene Presence");
presence = m_restorePresences[client.AgentId]; presence = m_restorePresences[client.AgentId];
m_restorePresences.Remove(client.AgentId); m_restorePresences.Remove(client.AgentId);
@ -1304,7 +1304,7 @@ namespace OpenSim.Region.Environment.Scenes
} }
else else
{ {
m_log.Info("REGION Add New Scene Presence"); m_log.Info("[REGION]: Add New Scene Presence");
m_estateManager.sendRegionHandshake(client); m_estateManager.sendRegionHandshake(client);