aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs3
-rw-r--r--OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs12
-rw-r--r--OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs215
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs15
-rw-r--r--OpenSim/Server/Handlers/Login/LLLoginHandlers.cs24
6 files changed, 172 insertions, 99 deletions
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index b304403..c1d0727 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -508,8 +508,7 @@ namespace OpenSim
508 scene.SnmpService.LinkUp(scene); 508 scene.SnmpService.LinkUp(scene);
509 } 509 }
510 510
511 scene.StartTimer(); 511 scene.Start();
512 scene.StartTimerWatchdog();
513 512
514 scene.StartScripts(); 513 scene.StartScripts();
515 514
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
index b5e79b8..7c6df03 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
@@ -598,12 +598,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain
598 "[TERRAIN]: Could not save terrain from {0} to {1}. Valid file extensions are {2}", 598 "[TERRAIN]: Could not save terrain from {0} to {1}. Valid file extensions are {2}",
599 m_scene.RegionInfo.RegionName, filename, m_supportedFileExtensions); 599 m_scene.RegionInfo.RegionName, filename, m_supportedFileExtensions);
600 } 600 }
601 else 601// else
602 { 602// {
603 m_log.ErrorFormat( 603// m_log.ErrorFormat(
604 "[TERRAIN]: Could not save terrain from {0} to {1}. {2} {3} {4} {5} {6} {7}", 604// "[TERRAIN]: Could not save terrain from {0} to {1}. {2} {3} {4} {5} {6} {7}",
605 m_scene.RegionInfo.RegionName, filename, fileWidth, fileHeight, fileStartX, fileStartY, offsetX, offsetY); 605// m_scene.RegionInfo.RegionName, filename, fileWidth, fileHeight, fileStartX, fileStartY, offsetX, offsetY);
606 } 606// }
607 } 607 }
608 608
609 /// <summary> 609 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index cded9be..f5623bd 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
@@ -125,7 +125,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
125 125
126 // XXX: For some reason, we store all animations and use them with upper case names, but in LSL animations 126 // XXX: For some reason, we store all animations and use them with upper case names, but in LSL animations
127 // are referenced with lower case names! 127 // are referenced with lower case names!
128 UUID animID = DefaultAvatarAnimations.GetDefaultAnimation(name); 128 UUID animID = DefaultAvatarAnimations.GetDefaultAnimation(name.ToUpper());
129 if (animID == UUID.Zero) 129 if (animID == UUID.Zero)
130 return; 130 return;
131 131
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 44a738e..6e70c36 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -172,6 +172,11 @@ namespace OpenSim.Region.Framework.Scenes
172 } 172 }
173 173
174 /// <summary> 174 /// <summary>
175 /// Current maintenance run number
176 /// </summary>
177 public uint MaintenanceRun { get; private set; }
178
179 /// <summary>
175 /// The minimum length of time in seconds that will be taken for a scene frame. If the frame takes less time then we 180 /// The minimum length of time in seconds that will be taken for a scene frame. If the frame takes less time then we
176 /// will sleep for the remaining period. 181 /// will sleep for the remaining period.
177 /// </summary> 182 /// </summary>
@@ -181,6 +186,11 @@ namespace OpenSim.Region.Framework.Scenes
181 /// </remarks> 186 /// </remarks>
182 public float MinFrameTime { get; private set; } 187 public float MinFrameTime { get; private set; }
183 188
189 /// <summary>
190 /// The minimum length of time in seconds that will be taken for a maintenance run.
191 /// </summary>
192 public float MinMaintenanceTime { get; private set; }
193
184 private int m_update_physics = 1; 194 private int m_update_physics = 1;
185 private int m_update_entitymovement = 1; 195 private int m_update_entitymovement = 1;
186 private int m_update_objects = 1; 196 private int m_update_objects = 1;
@@ -210,19 +220,22 @@ namespace OpenSim.Region.Framework.Scenes
210 220
211 public bool CombineRegions = false; 221 public bool CombineRegions = false;
212 /// <summary> 222 /// <summary>
223 /// Tick at which the last maintenance run occurred.
224 /// </summary>
225 private int m_lastMaintenanceTick;
226
227 /// <summary>
213 /// Signals whether temporary objects are currently being cleaned up. Needed because this is launched 228 /// Signals whether temporary objects are currently being cleaned up. Needed because this is launched
214 /// asynchronously from the update loop. 229 /// asynchronously from the update loop.
215 /// </summary> 230 /// </summary>
216 private bool m_cleaningTemps = false; 231 private bool m_cleaningTemps = false;
217 232
218 private Object m_heartbeatLock = new Object(); 233// private Object m_heartbeatLock = new Object();
219 234
220 // TODO: Possibly stop other classes being able to manipulate this directly. 235 // TODO: Possibly stop other classes being able to manipulate this directly.
221 private SceneGraph m_sceneGraph; 236 private SceneGraph m_sceneGraph;
222 private volatile int m_bordersLocked; 237 private volatile int m_bordersLocked;
223// private int m_RestartTimerCounter;
224 private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing 238 private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
225// private int m_incrementsof15seconds;
226 private volatile bool m_backingup; 239 private volatile bool m_backingup;
227 private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>(); 240 private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>();
228 private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>(); 241 private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>();
@@ -230,16 +243,34 @@ namespace OpenSim.Region.Framework.Scenes
230 private bool m_physics_enabled = true; 243 private bool m_physics_enabled = true;
231 private bool m_scripts_enabled = true; 244 private bool m_scripts_enabled = true;
232 private string m_defaultScriptEngine; 245 private string m_defaultScriptEngine;
246
247 /// <summary>
248 /// Tick at which the last login occurred.
249 /// </summary>
233 private int m_LastLogin; 250 private int m_LastLogin;
234 private Thread HeartbeatThread = null;
235 private volatile bool shuttingdown;
236 251
237 private int m_lastUpdate;
238 private int m_lastIncoming; 252 private int m_lastIncoming;
239 private int m_lastOutgoing; 253 private int m_lastOutgoing;
240 private bool m_firstHeartbeat = true;
241 private int m_hbRestarts = 0; 254 private int m_hbRestarts = 0;
242 255
256
257 /// <summary>
258 /// Thread that runs the scene loop.
259 /// </summary>
260 private Thread m_heartbeatThread;
261
262 /// <summary>
263 /// True if these scene is in the process of shutting down or is shutdown.
264 /// </summary>
265 public bool ShuttingDown
266 {
267 get { return m_shuttingDown; }
268 }
269 private volatile bool m_shuttingDown;
270
271// private int m_lastUpdate;
272 private bool m_firstHeartbeat = true;
273
243 private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time; 274 private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time;
244 private bool m_reprioritizationEnabled = true; 275 private bool m_reprioritizationEnabled = true;
245 private double m_reprioritizationInterval = 5000.0; 276 private double m_reprioritizationInterval = 5000.0;
@@ -566,6 +597,7 @@ namespace OpenSim.Region.Framework.Scenes
566 { 597 {
567 m_config = config; 598 m_config = config;
568 MinFrameTime = 0.089f; 599 MinFrameTime = 0.089f;
600 MinMaintenanceTime = 1;
569 601
570 Random random = new Random(); 602 Random random = new Random();
571 603
@@ -577,7 +609,6 @@ namespace OpenSim.Region.Framework.Scenes
577 m_EstateDataService = estateDataService; 609 m_EstateDataService = estateDataService;
578 m_regionHandle = m_regInfo.RegionHandle; 610 m_regionHandle = m_regInfo.RegionHandle;
579 m_regionName = m_regInfo.RegionName; 611 m_regionName = m_regInfo.RegionName;
580 m_lastUpdate = Util.EnvironmentTickCount();
581 m_lastIncoming = 0; 612 m_lastIncoming = 0;
582 m_lastOutgoing = 0; 613 m_lastOutgoing = 0;
583 614
@@ -834,18 +865,13 @@ namespace OpenSim.Region.Framework.Scenes
834 865
835 m_permissions = new ScenePermissions(this); 866 m_permissions = new ScenePermissions(this);
836 867
837 m_lastUpdate = Util.EnvironmentTickCount(); 868// m_lastUpdate = Util.EnvironmentTickCount();
838 } 869 }
839 870
840 #endregion 871 #endregion
841 872
842 #region Startup / Close Methods 873 #region Startup / Close Methods
843 874
844 public bool ShuttingDown
845 {
846 get { return shuttingdown; }
847 }
848
849 /// <value> 875 /// <value>
850 /// The scene graph for this scene 876 /// The scene graph for this scene
851 /// </value> 877 /// </value>
@@ -1107,6 +1133,12 @@ namespace OpenSim.Region.Framework.Scenes
1107 m_physics_enabled = enablePhysics; 1133 m_physics_enabled = enablePhysics;
1108 } 1134 }
1109 1135
1136// if (options.ContainsKey("collisions"))
1137// {
1138// // TODO: Implement. If false, should stop objects colliding, though possibly should still allow
1139// // the avatar themselves to collide with the ground.
1140// }
1141
1110 if (options.ContainsKey("teleport")) 1142 if (options.ContainsKey("teleport"))
1111 { 1143 {
1112 bool enableTeleportDebugging; 1144 bool enableTeleportDebugging;
@@ -1158,8 +1190,7 @@ namespace OpenSim.Region.Framework.Scenes
1158 ForEachScenePresence(delegate(ScenePresence avatar) { avatar.ControllingClient.Close(); }); 1190 ForEachScenePresence(delegate(ScenePresence avatar) { avatar.ControllingClient.Close(); });
1159 1191
1160 // Stop updating the scene objects and agents. 1192 // Stop updating the scene objects and agents.
1161 //m_heartbeatTimer.Close(); 1193 m_shuttingDown = true;
1162 shuttingdown = true;
1163 1194
1164 m_log.Debug("[SCENE]: Persisting changed objects"); 1195 m_log.Debug("[SCENE]: Persisting changed objects");
1165 EventManager.TriggerSceneShuttingDown(this); 1196 EventManager.TriggerSceneShuttingDown(this);
@@ -1183,16 +1214,16 @@ namespace OpenSim.Region.Framework.Scenes
1183 } 1214 }
1184 1215
1185 /// <summary> 1216 /// <summary>
1186 /// Start the timer which triggers regular scene updates 1217 /// Start the scene
1187 /// </summary> 1218 /// </summary>
1188 public void StartTimer() 1219 public void Start()
1189 { 1220 {
1190// m_log.DebugFormat("[SCENE]: Starting Heartbeat timer for {0}", RegionInfo.RegionName); 1221// m_log.DebugFormat("[SCENE]: Starting Heartbeat timer for {0}", RegionInfo.RegionName);
1191 1222
1192 //m_heartbeatTimer.Enabled = true; 1223 //m_heartbeatTimer.Enabled = true;
1193 //m_heartbeatTimer.Interval = (int)(m_timespan * 1000); 1224 //m_heartbeatTimer.Interval = (int)(m_timespan * 1000);
1194 //m_heartbeatTimer.Elapsed += new ElapsedEventHandler(Heartbeat); 1225 //m_heartbeatTimer.Elapsed += new ElapsedEventHandler(Heartbeat);
1195 if (HeartbeatThread != null) 1226 if (m_heartbeatThread != null)
1196 { 1227 {
1197 m_hbRestarts++; 1228 m_hbRestarts++;
1198 if(m_hbRestarts > 10) 1229 if(m_hbRestarts > 10)
@@ -1208,13 +1239,13 @@ namespace OpenSim.Region.Framework.Scenes
1208//proc.WaitForExit(); 1239//proc.WaitForExit();
1209//Thread.Sleep(1000); 1240//Thread.Sleep(1000);
1210//Environment.Exit(1); 1241//Environment.Exit(1);
1211 HeartbeatThread.Abort(); 1242 m_heartbeatThread.Abort();
1212 Watchdog.AbortThread(HeartbeatThread.ManagedThreadId); 1243 Watchdog.AbortThread(m_heartbeatThread.ManagedThreadId);
1213 HeartbeatThread = null; 1244 m_heartbeatThread = null;
1214 } 1245 }
1215 m_lastUpdate = Util.EnvironmentTickCount(); 1246// m_lastUpdate = Util.EnvironmentTickCount();
1216 1247
1217 HeartbeatThread 1248 m_heartbeatThread
1218 = Watchdog.StartThread( 1249 = Watchdog.StartThread(
1219 Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, false); 1250 Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, false);
1220 } 1251 }
@@ -1245,34 +1276,97 @@ namespace OpenSim.Region.Framework.Scenes
1245 /// </summary> 1276 /// </summary>
1246 private void Heartbeat() 1277 private void Heartbeat()
1247 { 1278 {
1248 if (!Monitor.TryEnter(m_heartbeatLock)) 1279// if (!Monitor.TryEnter(m_heartbeatLock))
1249 { 1280// {
1250 Watchdog.RemoveThread(); 1281// Watchdog.RemoveThread();
1251 return; 1282// return;
1252 } 1283// }
1253 1284
1254 try 1285// try
1255 { 1286// {
1256 m_eventManager.TriggerOnRegionStarted(this);
1257 1287
1258 // The first frame can take a very long time due to physics actors being added on startup. Therefore, 1288 m_eventManager.TriggerOnRegionStarted(this);
1259 // don't turn on the watchdog alarm for this thread until the second frame, in order to prevent false
1260 // alarms for scenes with many objects.
1261 Update(1);
1262 Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true;
1263 1289
1264 while (!shuttingdown) 1290 // The first frame can take a very long time due to physics actors being added on startup. Therefore,
1265 Update(-1); 1291 // don't turn on the watchdog alarm for this thread until the second frame, in order to prevent false
1266 } 1292 // alarms for scenes with many objects.
1267 finally 1293 Update(1);
1268 { 1294
1269 Monitor.Pulse(m_heartbeatLock); 1295 Watchdog.StartThread(
1270 Monitor.Exit(m_heartbeatLock); 1296 Maintenance, string.Format("Maintenance ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, true);
1271 } 1297
1298 Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true;
1299 Update(-1);
1300
1301// m_lastUpdate = Util.EnvironmentTickCount();
1302// m_firstHeartbeat = false;
1303// }
1304// finally
1305// {
1306// Monitor.Pulse(m_heartbeatLock);
1307// Monitor.Exit(m_heartbeatLock);
1308// }
1309
1310 Watchdog.RemoveThread();
1311 }
1312
1313 private void Maintenance()
1314 {
1315 DoMaintenance(-1);
1272 1316
1273 Watchdog.RemoveThread(); 1317 Watchdog.RemoveThread();
1274 } 1318 }
1275 1319
1320 public void DoMaintenance(int runs)
1321 {
1322 long? endRun = null;
1323 int runtc;
1324 int previousMaintenanceTick;
1325
1326 if (runs >= 0)
1327 endRun = MaintenanceRun + runs;
1328
1329 List<Vector3> coarseLocations;
1330 List<UUID> avatarUUIDs;
1331
1332 while (!m_shuttingDown && (endRun == null || MaintenanceRun < endRun))
1333 {
1334 runtc = Util.EnvironmentTickCount();
1335 ++MaintenanceRun;
1336
1337 // Coarse locations relate to positions of green dots on the mini-map (on a SecondLife client)
1338 if (MaintenanceRun % (m_update_coarse_locations / 10) == 0)
1339 {
1340 SceneGraph.GetCoarseLocations(out coarseLocations, out avatarUUIDs, 60);
1341 // Send coarse locations to clients
1342 ForEachScenePresence(delegate(ScenePresence presence)
1343 {
1344 presence.SendCoarseLocations(coarseLocations, avatarUUIDs);
1345 });
1346 }
1347
1348 Watchdog.UpdateThread();
1349
1350 previousMaintenanceTick = m_lastMaintenanceTick;
1351 m_lastMaintenanceTick = Util.EnvironmentTickCount();
1352 runtc = Util.EnvironmentTickCountSubtract(m_lastMaintenanceTick, runtc);
1353 runtc = (int)(MinMaintenanceTime * 1000) - runtc;
1354
1355 if (runtc > 0)
1356 Thread.Sleep(runtc);
1357
1358 // Optionally warn if a frame takes double the amount of time that it should.
1359 if (DebugUpdates
1360 && Util.EnvironmentTickCountSubtract(
1361 m_lastMaintenanceTick, previousMaintenanceTick) > (int)(MinMaintenanceTime * 1000 * 2))
1362 m_log.WarnFormat(
1363 "[SCENE]: Maintenance took {0} ms (desired max {1} ms) in {2}",
1364 Util.EnvironmentTickCountSubtract(m_lastMaintenanceTick, previousMaintenanceTick),
1365 MinMaintenanceTime * 1000,
1366 RegionInfo.RegionName);
1367 }
1368 }
1369
1276 public override void Update(int frames) 1370 public override void Update(int frames)
1277 { 1371 {
1278 long? endFrame = null; 1372 long? endFrame = null;
@@ -1284,10 +1378,8 @@ namespace OpenSim.Region.Framework.Scenes
1284 int tmpPhysicsMS, tmpPhysicsMS2, tmpAgentMS, tmpTempOnRezMS, evMS, backMS, terMS; 1378 int tmpPhysicsMS, tmpPhysicsMS2, tmpAgentMS, tmpTempOnRezMS, evMS, backMS, terMS;
1285 int previousFrameTick; 1379 int previousFrameTick;
1286 int maintc; 1380 int maintc;
1287 List<Vector3> coarseLocations;
1288 List<UUID> avatarUUIDs;
1289 1381
1290 while (!shuttingdown && (endFrame == null || Frame < endFrame)) 1382 while (!m_shuttingDown && (endFrame == null || Frame < endFrame))
1291 { 1383 {
1292 maintc = Util.EnvironmentTickCount(); 1384 maintc = Util.EnvironmentTickCount();
1293 ++Frame; 1385 ++Frame;
@@ -1337,17 +1429,6 @@ namespace OpenSim.Region.Framework.Scenes
1337 if (Frame % m_update_presences == 0) 1429 if (Frame % m_update_presences == 0)
1338 m_sceneGraph.UpdatePresences(); 1430 m_sceneGraph.UpdatePresences();
1339 1431
1340 // Coarse locations relate to positions of green dots on the mini-map (on a SecondLife client)
1341 if (Frame % m_update_coarse_locations == 0)
1342 {
1343 SceneGraph.GetCoarseLocations(out coarseLocations, out avatarUUIDs, 60);
1344 // Send coarse locations to clients
1345 ForEachScenePresence(delegate(ScenePresence presence)
1346 {
1347 presence.SendCoarseLocations(coarseLocations, avatarUUIDs);
1348 });
1349 }
1350
1351 agentMS += Util.EnvironmentTickCountSubtract(tmpAgentMS); 1432 agentMS += Util.EnvironmentTickCountSubtract(tmpAgentMS);
1352 1433
1353 // Delete temp-on-rez stuff 1434 // Delete temp-on-rez stuff
@@ -1455,7 +1536,6 @@ namespace OpenSim.Region.Framework.Scenes
1455 1536
1456 EventManager.TriggerRegionHeartbeatEnd(this); 1537 EventManager.TriggerRegionHeartbeatEnd(this);
1457 1538
1458 // Tell the watchdog that this thread is still alive
1459 Watchdog.UpdateThread(); 1539 Watchdog.UpdateThread();
1460 1540
1461 previousFrameTick = m_lastFrameTick; 1541 previousFrameTick = m_lastFrameTick;
@@ -1463,15 +1543,11 @@ namespace OpenSim.Region.Framework.Scenes
1463 maintc = Util.EnvironmentTickCountSubtract(m_lastFrameTick, maintc); 1543 maintc = Util.EnvironmentTickCountSubtract(m_lastFrameTick, maintc);
1464 maintc = (int)(MinFrameTime * 1000) - maintc; 1544 maintc = (int)(MinFrameTime * 1000) - maintc;
1465 1545
1466 m_lastUpdate = Util.EnvironmentTickCount();
1467 m_firstHeartbeat = false; 1546 m_firstHeartbeat = false;
1468 1547
1469 if (maintc > 0) 1548 if (maintc > 0)
1470 Thread.Sleep(maintc); 1549 Thread.Sleep(maintc);
1471 1550
1472 m_lastUpdate = Util.EnvironmentTickCount();
1473 m_firstHeartbeat = false;
1474
1475 // Optionally warn if a frame takes double the amount of time that it should. 1551 // Optionally warn if a frame takes double the amount of time that it should.
1476 if (DebugUpdates 1552 if (DebugUpdates
1477 && Util.EnvironmentTickCountSubtract( 1553 && Util.EnvironmentTickCountSubtract(
@@ -2662,7 +2738,6 @@ namespace OpenSim.Region.Framework.Scenes
2662 || (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0; 2738 || (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0;
2663 2739
2664 CheckHeartbeat(); 2740 CheckHeartbeat();
2665 ScenePresence presence;
2666 2741
2667 ScenePresence sp = GetScenePresence(client.AgentId); 2742 ScenePresence sp = GetScenePresence(client.AgentId);
2668 2743
@@ -3253,7 +3328,7 @@ namespace OpenSim.Region.Framework.Scenes
3253 3328
3254 public override void RemoveClient(UUID agentID, bool closeChildAgents) 3329 public override void RemoveClient(UUID agentID, bool closeChildAgents)
3255 { 3330 {
3256 CheckHeartbeat(); 3331// CheckHeartbeat();
3257 bool isChildAgent = false; 3332 bool isChildAgent = false;
3258 ScenePresence avatar = GetScenePresence(agentID); 3333 ScenePresence avatar = GetScenePresence(agentID);
3259 if (avatar != null) 3334 if (avatar != null)
@@ -4700,7 +4775,7 @@ namespace OpenSim.Region.Framework.Scenes
4700 4775
4701 int health=1; // Start at 1, means we're up 4776 int health=1; // Start at 1, means we're up
4702 4777
4703 if (Util.EnvironmentTickCountSubtract(m_lastUpdate) < 1000) 4778 if ((Util.EnvironmentTickCountSubtract(m_lastFrameTick)) < 1000)
4704 { 4779 {
4705 health+=1; 4780 health+=1;
4706 flags |= 1; 4781 flags |= 1;
@@ -4737,6 +4812,8 @@ Environment.Exit(1);
4737 // 4812 //
4738 if (Util.EnvironmentTickCountSubtract(m_LastLogin) < 240000) 4813 if (Util.EnvironmentTickCountSubtract(m_LastLogin) < 240000)
4739 health++; 4814 health++;
4815 else
4816 return health;
4740 4817
4741 return health; 4818 return health;
4742 } 4819 }
@@ -4929,8 +5006,8 @@ Environment.Exit(1);
4929 if (m_firstHeartbeat) 5006 if (m_firstHeartbeat)
4930 return; 5007 return;
4931 5008
4932 if (Util.EnvironmentTickCountSubtract(m_lastUpdate) > 5000) 5009 if ((Util.EnvironmentTickCountSubtract(m_lastFrameTick)) > 5000)
4933 StartTimer(); 5010 Start();
4934 } 5011 }
4935 5012
4936 public override ISceneObject DeserializeObject(string representation) 5013 public override ISceneObject DeserializeObject(string representation)
diff --git a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
index d0142a4..0b9f875 100644
--- a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
@@ -70,8 +70,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
70 70
71 public void Initialise(IConfigSource config) 71 public void Initialise(IConfigSource config)
72 { 72 {
73 //m_log.Info("[RegionReady] Initialising");
74
75 m_config = config.Configs["RegionReady"]; 73 m_config = config.Configs["RegionReady"];
76 if (m_config != null) 74 if (m_config != null)
77 { 75 {
@@ -84,9 +82,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
84 m_uri = m_config.GetString("alert_uri",string.Empty); 82 m_uri = m_config.GetString("alert_uri",string.Empty);
85 } 83 }
86 } 84 }
87
88// if (!m_enabled)
89// m_log.Info("[RegionReady] disabled.");
90 } 85 }
91 86
92 public void AddRegion(Scene scene) 87 public void AddRegion(Scene scene)
@@ -113,7 +108,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
113 { 108 {
114 scene.LoginLock = true; 109 scene.LoginLock = true;
115 scene.LoginsDisabled = true; 110 scene.LoginsDisabled = true;
116 m_log.InfoFormat("[RegionReady]: Logins disabled for {0}",m_scene.RegionInfo.RegionName); 111 m_log.InfoFormat("[RegionReady]: Region {0} - logins disabled during initialization.",m_scene.RegionInfo.RegionName);
117 112
118 if(m_uri != string.Empty) 113 if(m_uri != string.Empty)
119 { 114 {
@@ -167,7 +162,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
167 162
168 void OnEmptyScriptCompileQueue(int numScriptsFailed, string message) 163 void OnEmptyScriptCompileQueue(int numScriptsFailed, string message)
169 { 164 {
170 m_log.InfoFormat("[RegionReady]: Script compile queue empty!"); 165 m_log.DebugFormat("[RegionReady]: Script compile queue empty!");
171 166
172 if (m_firstEmptyCompileQueue || m_oarFileLoading) 167 if (m_firstEmptyCompileQueue || m_oarFileLoading)
173 { 168 {
@@ -194,7 +189,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
194 c.SenderUUID = UUID.Zero; 189 c.SenderUUID = UUID.Zero;
195 c.Scene = m_scene; 190 c.Scene = m_scene;
196 191
197 m_log.InfoFormat("[RegionReady]: Region \"{0}\" is ready: \"{1}\" on channel {2}", 192 m_log.DebugFormat("[RegionReady]: Region \"{0}\" is ready: \"{1}\" on channel {2}",
198 m_scene.RegionInfo.RegionName, c.Message, m_channelNotify); 193 m_scene.RegionInfo.RegionName, c.Message, m_channelNotify);
199 194
200 m_scene.EventManager.TriggerOnChatBroadcast(this, c); 195 m_scene.EventManager.TriggerOnChatBroadcast(this, c);
@@ -210,7 +205,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
210 { 205 {
211 m_lastOarLoadedOk = true; 206 m_lastOarLoadedOk = true;
212 } else { 207 } else {
213 m_log.InfoFormat("[RegionReady]: Oar file load errors: {0}", message); 208 m_log.WarnFormat("[RegionReady]: Oar file load errors: {0}", message);
214 m_lastOarLoadedOk = false; 209 m_lastOarLoadedOk = false;
215 } 210 }
216 } 211 }
@@ -233,7 +228,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
233 // m_log.InfoFormat("[RegionReady]: Logins enabled for {0}, Oar {1}", 228 // m_log.InfoFormat("[RegionReady]: Logins enabled for {0}, Oar {1}",
234 // m_scene.RegionInfo.RegionName, m_oarFileLoading.ToString()); 229 // m_scene.RegionInfo.RegionName, m_oarFileLoading.ToString());
235 230
236 m_log.InfoFormat("[RegionReady]: Logins enabled for {0}", m_scene.RegionInfo.RegionName); 231 m_log.InfoFormat("[RegionReady]: Initialization complete - logins enabled for {0}", m_scene.RegionInfo.RegionName);
237 232
238 if ( m_uri != string.Empty ) 233 if ( m_uri != string.Empty )
239 { 234 {
diff --git a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
index ed62f95..f83a239 100644
--- a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
+++ b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
@@ -73,17 +73,19 @@ namespace OpenSim.Server.Handlers.Login
73 73
74 if (requestData != null) 74 if (requestData != null)
75 { 75 {
76 foreach (string key in requestData.Keys) 76 // Debug code to show exactly what login parameters the viewer is sending us.
77 { 77 // TODO: Extract into a method that can be generally applied if one doesn't already exist.
78 object value = requestData[key]; 78// foreach (string key in requestData.Keys)
79 Console.WriteLine("{0}:{1}", key, value); 79// {
80 if (value is ArrayList) 80// object value = requestData[key];
81 { 81// Console.WriteLine("{0}:{1}", key, value);
82 ICollection col = value as ICollection; 82// if (value is ArrayList)
83 foreach (object item in col) 83// {
84 Console.WriteLine(" {0}", item); 84// ICollection col = value as ICollection;
85 } 85// foreach (object item in col)
86 } 86// Console.WriteLine(" {0}", item);
87// }
88// }
87 89
88 if (requestData.ContainsKey("first") && requestData["first"] != null && 90 if (requestData.ContainsKey("first") && requestData["first"] != null &&
89 requestData.ContainsKey("last") && requestData["last"] != null && ( 91 requestData.ContainsKey("last") && requestData["last"] != null && (