diff options
author | Dan Lake | 2012-07-18 13:07:07 -0700 |
---|---|---|
committer | Dan Lake | 2012-07-18 13:07:07 -0700 |
commit | dd85d7d981a93b44c264695020768f8b7399ab31 (patch) | |
tree | e5d31df36914e3e330c9b7333d200145a57d2bd8 /OpenSim | |
parent | Missing parameter in log error message was throwing exception (diff) | |
parent | Close() the ScenePresence after we've removed it from the scene graph, to cut... (diff) | |
download | opensim-SC_OLD-dd85d7d981a93b44c264695020768f8b7399ab31.zip opensim-SC_OLD-dd85d7d981a93b44c264695020768f8b7399ab31.tar.gz opensim-SC_OLD-dd85d7d981a93b44c264695020768f8b7399ab31.tar.bz2 opensim-SC_OLD-dd85d7d981a93b44c264695020768f8b7399ab31.tar.xz |
Merge branch 'master' of git://opensimulator.org/git/opensim
Diffstat (limited to 'OpenSim')
13 files changed, 111 insertions, 139 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 64ee7e4..d34a8f6 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -567,10 +567,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
567 | 567 | ||
568 | m_scene.InventoryService.UpdateItem(item); | 568 | m_scene.InventoryService.UpdateItem(item); |
569 | 569 | ||
570 | // this gets called when the agent logs off! | 570 | // If the name of the object has been changed whilst attached then we want to update the inventory |
571 | // item in the viewer. | ||
571 | if (sp.ControllingClient != null) | 572 | if (sp.ControllingClient != null) |
572 | sp.ControllingClient.SendInventoryItemCreateUpdate(item, 0); | 573 | sp.ControllingClient.SendInventoryItemCreateUpdate(item, 0); |
573 | } | 574 | } |
575 | |||
574 | grp.HasGroupChanged = false; // Prevent it being saved over and over | 576 | grp.HasGroupChanged = false; // Prevent it being saved over and over |
575 | } | 577 | } |
576 | // else | 578 | // else |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs index 0dad3c4..596174b 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs | |||
@@ -137,13 +137,15 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
137 | foreach (Scene scene in m_Scenes) | 137 | foreach (Scene scene in m_Scenes) |
138 | { | 138 | { |
139 | // m_log.DebugFormat( | 139 | // m_log.DebugFormat( |
140 | // "[INSTANT MESSAGE]: Looking for root agent {0} in {1}", | 140 | // "[INSTANT MESSAGE]: Looking for root agent {0} in {1}", |
141 | // toAgentID.ToString(), scene.RegionInfo.RegionName); | 141 | // toAgentID.ToString(), scene.RegionInfo.RegionName); |
142 | |||
142 | ScenePresence sp = scene.GetScenePresence(toAgentID); | 143 | ScenePresence sp = scene.GetScenePresence(toAgentID); |
143 | if (sp != null && !sp.IsChildAgent) | 144 | if (sp != null && !sp.IsChildAgent) |
144 | { | 145 | { |
145 | // Local message | 146 | // Local message |
146 | // m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", user.Name, toAgentID); | 147 | m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", sp.Name, toAgentID); |
148 | |||
147 | sp.ControllingClient.SendInstantMessage(im); | 149 | sp.ControllingClient.SendInstantMessage(im); |
148 | 150 | ||
149 | // Message sent | 151 | // Message sent |
@@ -155,13 +157,15 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
155 | // try child avatar second | 157 | // try child avatar second |
156 | foreach (Scene scene in m_Scenes) | 158 | foreach (Scene scene in m_Scenes) |
157 | { | 159 | { |
158 | // m_log.DebugFormat( | 160 | m_log.DebugFormat( |
159 | // "[INSTANT MESSAGE]: Looking for child of {0} in {1}", toAgentID, scene.RegionInfo.RegionName); | 161 | "[INSTANT MESSAGE]: Looking for child of {0} in {1}", toAgentID, scene.RegionInfo.RegionName); |
162 | |||
160 | ScenePresence sp = scene.GetScenePresence(toAgentID); | 163 | ScenePresence sp = scene.GetScenePresence(toAgentID); |
161 | if (sp != null) | 164 | if (sp != null) |
162 | { | 165 | { |
163 | // Local message | 166 | // Local message |
164 | // m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to child agent {0} {1}", user.Name, toAgentID); | 167 | m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to child agent {0} {1}", sp.Name, toAgentID); |
168 | |||
165 | sp.ControllingClient.SendInstantMessage(im); | 169 | sp.ControllingClient.SendInstantMessage(im); |
166 | 170 | ||
167 | // Message sent | 171 | // Message sent |
@@ -170,10 +174,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
170 | } | 174 | } |
171 | } | 175 | } |
172 | 176 | ||
173 | // m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to {0} via XMLRPC", im.toAgentID); | 177 | m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to {0} via XMLRPC", im.toAgentID); |
174 | SendGridInstantMessageViaXMLRPC(im, result); | ||
175 | 178 | ||
176 | return; | 179 | SendGridInstantMessageViaXMLRPC(im, result); |
177 | } | 180 | } |
178 | 181 | ||
179 | private void HandleUndeliveredMessage(GridInstantMessage im, MessageResultNotification result) | 182 | private void HandleUndeliveredMessage(GridInstantMessage im, MessageResultNotification result) |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index 19c774f..f3af59a 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs | |||
@@ -297,7 +297,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
297 | }); | 297 | }); |
298 | } | 298 | } |
299 | } | 299 | } |
300 | else if (im.dialog == (byte) InstantMessageDialog.InventoryDeclined) | 300 | else if ( |
301 | im.dialog == (byte)InstantMessageDialog.InventoryDeclined | ||
302 | || im.dialog == (byte)InstantMessageDialog.TaskInventoryDeclined) | ||
301 | { | 303 | { |
302 | // Here, the recipient is local and we can assume that the | 304 | // Here, the recipient is local and we can assume that the |
303 | // inventory is loaded. Courtesy of the above bulk update, | 305 | // inventory is loaded. Courtesy of the above bulk update, |
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs index 42dbedc..143af48 100644 --- a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs | |||
@@ -77,8 +77,6 @@ namespace OpenSim.Region.Framework.Interfaces | |||
77 | /// <param name="itemID">The item ID of the script.</param> | 77 | /// <param name="itemID">The item ID of the script.</param> |
78 | bool GetScriptState(UUID itemID); | 78 | bool GetScriptState(UUID itemID); |
79 | 79 | ||
80 | void SetRunEnable(UUID instanceID, bool enable); | ||
81 | |||
82 | void SaveAllState(); | 80 | void SaveAllState(); |
83 | 81 | ||
84 | /// <summary> | 82 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 9ff8467..e413281 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -2143,24 +2143,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2143 | if (part == null) | 2143 | if (part == null) |
2144 | return; | 2144 | return; |
2145 | 2145 | ||
2146 | IScriptModule[] engines = RequestModuleInterfaces<IScriptModule>(); | ||
2147 | |||
2148 | if (running) | 2146 | if (running) |
2149 | { | ||
2150 | foreach (IScriptModule engine in engines) | ||
2151 | { | ||
2152 | engine.SetRunEnable(itemID, true); | ||
2153 | } | ||
2154 | EventManager.TriggerStartScript(part.LocalId, itemID); | 2147 | EventManager.TriggerStartScript(part.LocalId, itemID); |
2155 | } | ||
2156 | else | 2148 | else |
2157 | { | ||
2158 | foreach (IScriptModule engine in engines) | ||
2159 | { | ||
2160 | engine.SetRunEnable(itemID, false); | ||
2161 | } | ||
2162 | EventManager.TriggerStopScript(part.LocalId, itemID); | 2149 | EventManager.TriggerStopScript(part.LocalId, itemID); |
2163 | } | ||
2164 | } | 2150 | } |
2165 | 2151 | ||
2166 | public void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) | 2152 | public void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 3e9583c..de2b192 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3317,24 +3317,30 @@ namespace OpenSim.Region.Framework.Scenes | |||
3317 | if (AgentTransactionsModule != null) | 3317 | if (AgentTransactionsModule != null) |
3318 | AgentTransactionsModule.RemoveAgentAssetTransactions(agentID); | 3318 | AgentTransactionsModule.RemoveAgentAssetTransactions(agentID); |
3319 | 3319 | ||
3320 | avatar.Close(); | ||
3321 | |||
3322 | m_authenticateHandler.RemoveCircuit(avatar.ControllingClient.CircuitCode); | 3320 | m_authenticateHandler.RemoveCircuit(avatar.ControllingClient.CircuitCode); |
3323 | } | 3321 | } |
3324 | catch (Exception e) | 3322 | catch (Exception e) |
3325 | { | 3323 | { |
3326 | m_log.Error( | 3324 | m_log.Error( |
3327 | string.Format("[SCENE]: Exception removing {0} from {1}, ", avatar.Name, RegionInfo.RegionName), e); | 3325 | string.Format("[SCENE]: Exception removing {0} from {1}. Cleaning up. Exception ", avatar.Name, Name), e); |
3328 | } | 3326 | } |
3329 | finally | 3327 | finally |
3330 | { | 3328 | { |
3331 | // Always clean these structures up so that any failure above doesn't cause them to remain in the | 3329 | try |
3332 | // scene with possibly bad effects (e.g. continually timing out on unacked packets and triggering | 3330 | { |
3333 | // the same cleanup exception continually. | 3331 | // Always clean these structures up so that any failure above doesn't cause them to remain in the |
3334 | // TODO: This should probably extend to the whole method, but we don't want to also catch the NRE | 3332 | // scene with possibly bad effects (e.g. continually timing out on unacked packets and triggering |
3335 | // since this would hide the underlying failure and other associated problems. | 3333 | // the same cleanup exception continually. |
3336 | m_sceneGraph.RemoveScenePresence(agentID); | 3334 | m_sceneGraph.RemoveScenePresence(agentID); |
3337 | m_clientManager.Remove(agentID); | 3335 | m_clientManager.Remove(agentID); |
3336 | |||
3337 | avatar.Close(); | ||
3338 | } | ||
3339 | catch (Exception e) | ||
3340 | { | ||
3341 | m_log.Error( | ||
3342 | string.Format("[SCENE]: Exception in final clean up of {0} in {1}. Exception ", avatar.Name, Name), e); | ||
3343 | } | ||
3338 | } | 3344 | } |
3339 | 3345 | ||
3340 | //m_log.InfoFormat("[SCENE] Memory pre GC {0}", System.GC.GetTotalMemory(false)); | 3346 | //m_log.InfoFormat("[SCENE] Memory pre GC {0}", System.GC.GetTotalMemory(false)); |
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs index ec13b6c..b04f6b6 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs | |||
@@ -64,16 +64,6 @@ namespace OpenSim.Region.ScriptEngine.Interfaces | |||
64 | bool Running { get; set; } | 64 | bool Running { get; set; } |
65 | 65 | ||
66 | /// <summary> | 66 | /// <summary> |
67 | /// Gets or sets a value indicating whether this | ||
68 | /// <see cref="OpenSim.Region.ScriptEngine.Interfaces.IScriptInstance"/> is run. | ||
69 | /// For viewer script editor control | ||
70 | /// </summary> | ||
71 | /// <value> | ||
72 | /// <c>true</c> if run; otherwise, <c>false</c>. | ||
73 | /// </value> | ||
74 | bool Run { get; set; } | ||
75 | |||
76 | /// <summary> | ||
77 | /// Is the script suspended? | 67 | /// Is the script suspended? |
78 | /// </summary> | 68 | /// </summary> |
79 | bool Suspended { get; set; } | 69 | bool Suspended { get; set; } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index f88338d..084bd41 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -3973,23 +3973,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3973 | if (agentItem == null) | 3973 | if (agentItem == null) |
3974 | return; | 3974 | return; |
3975 | 3975 | ||
3976 | byte[] bucket = new byte[17]; | 3976 | if (m_TransferModule != null) |
3977 | bucket[0] = (byte)item.Type; | 3977 | { |
3978 | byte[] objBytes = agentItem.ID.GetBytes(); | 3978 | byte[] bucket = new byte[] { (byte)item.Type }; |
3979 | Array.Copy(objBytes, 0, bucket, 1, 16); | ||
3980 | 3979 | ||
3981 | GridInstantMessage msg = new GridInstantMessage(World, | 3980 | GridInstantMessage msg = new GridInstantMessage(World, |
3982 | m_host.UUID, m_host.Name + ", an object owned by " + | 3981 | m_host.UUID, m_host.Name + ", an object owned by " + |
3983 | resolveName(m_host.OwnerID) + ",", destId, | 3982 | resolveName(m_host.OwnerID) + ",", destId, |
3984 | (byte)InstantMessageDialog.TaskInventoryOffered, | 3983 | (byte)InstantMessageDialog.TaskInventoryOffered, |
3985 | false, item.Name + "\n" + m_host.Name + " is located at " + | 3984 | false, item.Name + "\n" + m_host.Name + " is located at " + |
3986 | World.RegionInfo.RegionName+" "+ | 3985 | World.RegionInfo.RegionName+" "+ |
3987 | m_host.AbsolutePosition.ToString(), | 3986 | m_host.AbsolutePosition.ToString(), |
3988 | agentItem.ID, true, m_host.AbsolutePosition, | 3987 | agentItem.ID, true, m_host.AbsolutePosition, |
3989 | bucket); | 3988 | bucket); |
3990 | 3989 | ||
3991 | if (m_TransferModule != null) | ||
3992 | m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); | 3990 | m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); |
3991 | } | ||
3993 | 3992 | ||
3994 | ScriptSleep(3000); | 3993 | ScriptSleep(3000); |
3995 | } | 3994 | } |
@@ -6397,23 +6396,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6397 | if (folderID == UUID.Zero) | 6396 | if (folderID == UUID.Zero) |
6398 | return; | 6397 | return; |
6399 | 6398 | ||
6400 | byte[] bucket = new byte[17]; | ||
6401 | bucket[0] = (byte)AssetType.Folder; | ||
6402 | byte[] objBytes = folderID.GetBytes(); | ||
6403 | Array.Copy(objBytes, 0, bucket, 1, 16); | ||
6404 | |||
6405 | GridInstantMessage msg = new GridInstantMessage(World, | ||
6406 | m_host.UUID, m_host.Name + ", an object owned by " + | ||
6407 | resolveName(m_host.OwnerID) + ",", destID, | ||
6408 | (byte)InstantMessageDialog.InventoryOffered, | ||
6409 | false, category + "\n" + m_host.Name + " is located at " + | ||
6410 | World.RegionInfo.RegionName + " " + | ||
6411 | m_host.AbsolutePosition.ToString(), | ||
6412 | folderID, true, m_host.AbsolutePosition, | ||
6413 | bucket); | ||
6414 | |||
6415 | if (m_TransferModule != null) | 6399 | if (m_TransferModule != null) |
6400 | { | ||
6401 | byte[] bucket = new byte[] { (byte)AssetType.Folder }; | ||
6402 | |||
6403 | GridInstantMessage msg = new GridInstantMessage(World, | ||
6404 | m_host.UUID, m_host.Name + ", an object owned by " + | ||
6405 | resolveName(m_host.OwnerID) + ",", destID, | ||
6406 | (byte)InstantMessageDialog.TaskInventoryOffered, | ||
6407 | false, category + "\n" + m_host.Name + " is located at " + | ||
6408 | World.RegionInfo.RegionName + " " + | ||
6409 | m_host.AbsolutePosition.ToString(), | ||
6410 | folderID, true, m_host.AbsolutePosition, | ||
6411 | bucket); | ||
6412 | |||
6416 | m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); | 6413 | m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); |
6414 | } | ||
6417 | } | 6415 | } |
6418 | 6416 | ||
6419 | public void llSetVehicleType(int type) | 6417 | public void llSetVehicleType(int type) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 3654106..4137397 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1664,9 +1664,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1664 | CheckThreatLevel(ThreatLevel.Low, "osMessageObject"); | 1664 | CheckThreatLevel(ThreatLevel.Low, "osMessageObject"); |
1665 | m_host.AddScriptLPS(1); | 1665 | m_host.AddScriptLPS(1); |
1666 | 1666 | ||
1667 | UUID objUUID; | ||
1668 | if (!UUID.TryParse(objectUUID, out objUUID)) // prior to patching, a thrown exception regarding invalid GUID format would be shouted instead. | ||
1669 | { | ||
1670 | OSSLShoutError("osMessageObject() cannot send messages to objects with invalid UUIDs"); | ||
1671 | return; | ||
1672 | } | ||
1673 | |||
1667 | object[] resobj = new object[] { new LSL_Types.LSLString(m_host.UUID.ToString()), new LSL_Types.LSLString(message) }; | 1674 | object[] resobj = new object[] { new LSL_Types.LSLString(m_host.UUID.ToString()), new LSL_Types.LSLString(message) }; |
1668 | 1675 | ||
1669 | SceneObjectPart sceneOP = World.GetSceneObjectPart(new UUID(objectUUID)); | 1676 | SceneObjectPart sceneOP = World.GetSceneObjectPart(objUUID); |
1677 | |||
1678 | if (sceneOP == null) // prior to patching, PostObjectEvent() would cause a throw exception to be shouted instead. | ||
1679 | { | ||
1680 | OSSLShoutError("osMessageObject() cannot send message to " + objUUID.ToString() + ", object was not found in scene."); | ||
1681 | return; | ||
1682 | } | ||
1670 | 1683 | ||
1671 | m_ScriptEngine.PostObjectEvent( | 1684 | m_ScriptEngine.PostObjectEvent( |
1672 | sceneOP.LocalId, new EventParams( | 1685 | sceneOP.LocalId, new EventParams( |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index f1abd4b..5793cc9 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -121,8 +121,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
121 | 121 | ||
122 | public bool Running { get; set; } | 122 | public bool Running { get; set; } |
123 | 123 | ||
124 | public bool Run { get; set; } | ||
125 | |||
126 | public bool Suspended | 124 | public bool Suspended |
127 | { | 125 | { |
128 | get { return m_Suspended; } | 126 | get { return m_Suspended; } |
@@ -218,7 +216,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
218 | m_postOnRez = postOnRez; | 216 | m_postOnRez = postOnRez; |
219 | m_AttachedAvatar = part.ParentGroup.AttachedAvatar; | 217 | m_AttachedAvatar = part.ParentGroup.AttachedAvatar; |
220 | m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID; | 218 | m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID; |
221 | Run = true; | ||
222 | 219 | ||
223 | if (part != null) | 220 | if (part != null) |
224 | { | 221 | { |
@@ -315,11 +312,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
315 | part.SetScriptEvents(ItemID, | 312 | part.SetScriptEvents(ItemID, |
316 | (int)m_Script.GetStateEventFlags(State)); | 313 | (int)m_Script.GetStateEventFlags(State)); |
317 | 314 | ||
318 | Running = false; | 315 | if (!Running) |
319 | |||
320 | if (ShuttingDown) | ||
321 | m_startOnInit = false; | 316 | m_startOnInit = false; |
322 | 317 | ||
318 | Running = false; | ||
319 | |||
323 | // we get new rez events on sim restart, too | 320 | // we get new rez events on sim restart, too |
324 | // but if there is state, then we fire the change | 321 | // but if there is state, then we fire the change |
325 | // event | 322 | // event |
@@ -355,15 +352,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
355 | 352 | ||
356 | public void Init() | 353 | public void Init() |
357 | { | 354 | { |
358 | if (!m_startOnInit) | 355 | if (ShuttingDown) |
359 | return; | 356 | return; |
360 | 357 | ||
361 | if (m_startedFromSavedState) | 358 | if (m_startedFromSavedState) |
362 | { | 359 | { |
363 | if (!Run) | 360 | if (m_startOnInit) |
364 | return; | 361 | Start(); |
365 | |||
366 | Start(); | ||
367 | if (m_postOnRez) | 362 | if (m_postOnRez) |
368 | { | 363 | { |
369 | PostEvent(new EventParams("on_rez", | 364 | PostEvent(new EventParams("on_rez", |
@@ -395,10 +390,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
395 | } | 390 | } |
396 | else | 391 | else |
397 | { | 392 | { |
398 | if (!Run) | 393 | if (m_startOnInit) |
399 | return; | 394 | Start(); |
400 | |||
401 | Start(); | ||
402 | PostEvent(new EventParams("state_entry", | 395 | PostEvent(new EventParams("state_entry", |
403 | new Object[0], new DetectParams[0])); | 396 | new Object[0], new DetectParams[0])); |
404 | if (m_postOnRez) | 397 | if (m_postOnRez) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs index 797bce3..bcdc7bf 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs | |||
@@ -55,7 +55,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
55 | public static string Serialize(ScriptInstance instance) | 55 | public static string Serialize(ScriptInstance instance) |
56 | { | 56 | { |
57 | bool running = instance.Running; | 57 | bool running = instance.Running; |
58 | bool enabled = instance.Run; | ||
59 | 58 | ||
60 | XmlDocument xmldoc = new XmlDocument(); | 59 | XmlDocument xmldoc = new XmlDocument(); |
61 | 60 | ||
@@ -78,12 +77,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
78 | 77 | ||
79 | rootElement.AppendChild(run); | 78 | rootElement.AppendChild(run); |
80 | 79 | ||
81 | XmlElement run_enable = xmldoc.CreateElement("", "Run", ""); | ||
82 | run_enable.AppendChild(xmldoc.CreateTextNode( | ||
83 | enabled.ToString())); | ||
84 | |||
85 | rootElement.AppendChild(run_enable); | ||
86 | |||
87 | Dictionary<string, Object> vars = instance.GetVars(); | 80 | Dictionary<string, Object> vars = instance.GetVars(); |
88 | 81 | ||
89 | XmlElement variables = xmldoc.CreateElement("", "Variables", ""); | 82 | XmlElement variables = xmldoc.CreateElement("", "Variables", ""); |
@@ -232,7 +225,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
232 | { | 225 | { |
233 | object varValue; | 226 | object varValue; |
234 | XmlNodeList partL = rootNode.ChildNodes; | 227 | XmlNodeList partL = rootNode.ChildNodes; |
235 | instance.Run = true; | ||
236 | 228 | ||
237 | foreach (XmlNode part in partL) | 229 | foreach (XmlNode part in partL) |
238 | { | 230 | { |
@@ -244,9 +236,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
244 | case "Running": | 236 | case "Running": |
245 | instance.Running=bool.Parse(part.InnerText); | 237 | instance.Running=bool.Parse(part.InnerText); |
246 | break; | 238 | break; |
247 | case "Run": | ||
248 | instance.Run = bool.Parse(part.InnerText); | ||
249 | break; | ||
250 | case "Variables": | 239 | case "Variables": |
251 | XmlNodeList varL = part.ChildNodes; | 240 | XmlNodeList varL = part.ChildNodes; |
252 | foreach (XmlNode var in varL) | 241 | foreach (XmlNode var in varL) |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 20fad05..7a9c80c 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -108,6 +108,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
108 | private bool m_KillTimedOutScripts; | 108 | private bool m_KillTimedOutScripts; |
109 | private string m_ScriptEnginesPath = null; | 109 | private string m_ScriptEnginesPath = null; |
110 | 110 | ||
111 | private ExpiringCache<UUID, bool> m_runFlags = new ExpiringCache<UUID, bool>(); | ||
112 | |||
111 | /// <summary> | 113 | /// <summary> |
112 | /// Is the entire simulator in the process of shutting down? | 114 | /// Is the entire simulator in the process of shutting down? |
113 | /// </summary> | 115 | /// </summary> |
@@ -1196,6 +1198,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1196 | if (instance != null) | 1198 | if (instance != null) |
1197 | instance.Init(); | 1199 | instance.Init(); |
1198 | 1200 | ||
1201 | bool runIt; | ||
1202 | if (m_runFlags.TryGetValue(itemID, out runIt)) | ||
1203 | { | ||
1204 | if (!runIt) | ||
1205 | StopScript(itemID); | ||
1206 | m_runFlags.Remove(itemID); | ||
1207 | } | ||
1208 | |||
1199 | return true; | 1209 | return true; |
1200 | } | 1210 | } |
1201 | 1211 | ||
@@ -1541,13 +1551,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1541 | } | 1551 | } |
1542 | } | 1552 | } |
1543 | 1553 | ||
1544 | public void SetRunEnable(UUID instanceID, bool enable) | ||
1545 | { | ||
1546 | IScriptInstance instance = GetInstance(instanceID); | ||
1547 | if (instance != null) | ||
1548 | instance.Run = enable; | ||
1549 | } | ||
1550 | |||
1551 | public bool GetScriptState(UUID itemID) | 1554 | public bool GetScriptState(UUID itemID) |
1552 | { | 1555 | { |
1553 | IScriptInstance instance = GetInstance(itemID); | 1556 | IScriptInstance instance = GetInstance(itemID); |
@@ -1575,6 +1578,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1575 | IScriptInstance instance = GetInstance(itemID); | 1578 | IScriptInstance instance = GetInstance(itemID); |
1576 | if (instance != null) | 1579 | if (instance != null) |
1577 | instance.Start(); | 1580 | instance.Start(); |
1581 | else | ||
1582 | m_runFlags.AddOrUpdate(itemID, true, 240); | ||
1578 | } | 1583 | } |
1579 | 1584 | ||
1580 | public void StopScript(UUID itemID) | 1585 | public void StopScript(UUID itemID) |
@@ -1586,6 +1591,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1586 | // cause issues on mono 2.6, 2.10 and possibly later where locks are not released properly on abort. | 1591 | // cause issues on mono 2.6, 2.10 and possibly later where locks are not released properly on abort. |
1587 | instance.Stop(1000); | 1592 | instance.Stop(1000); |
1588 | } | 1593 | } |
1594 | else | ||
1595 | { | ||
1596 | m_runFlags.AddOrUpdate(itemID, false, 240); | ||
1597 | } | ||
1589 | } | 1598 | } |
1590 | 1599 | ||
1591 | public DetectParams GetDetectParams(UUID itemID, int idx) | 1600 | public DetectParams GetDetectParams(UUID itemID, int idx) |
diff --git a/OpenSim/Region/UserStatistics/WebStatsModule.cs b/OpenSim/Region/UserStatistics/WebStatsModule.cs index faf746f..c11ea02 100644 --- a/OpenSim/Region/UserStatistics/WebStatsModule.cs +++ b/OpenSim/Region/UserStatistics/WebStatsModule.cs | |||
@@ -57,7 +57,12 @@ namespace OpenSim.Region.UserStatistics | |||
57 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 57 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
58 | 58 | ||
59 | private static SqliteConnection dbConn; | 59 | private static SqliteConnection dbConn; |
60 | |||
61 | /// <summary> | ||
62 | /// User statistics sessions keyed by agent ID | ||
63 | /// </summary> | ||
60 | private Dictionary<UUID, UserSessionID> m_sessions = new Dictionary<UUID, UserSessionID>(); | 64 | private Dictionary<UUID, UserSessionID> m_sessions = new Dictionary<UUID, UserSessionID>(); |
65 | |||
61 | private List<Scene> m_scenes = new List<Scene>(); | 66 | private List<Scene> m_scenes = new List<Scene>(); |
62 | private Dictionary<string, IStatsController> reports = new Dictionary<string, IStatsController>(); | 67 | private Dictionary<string, IStatsController> reports = new Dictionary<string, IStatsController>(); |
63 | private Dictionary<UUID, USimStatsData> m_simstatsCounters = new Dictionary<UUID, USimStatsData>(); | 68 | private Dictionary<UUID, USimStatsData> m_simstatsCounters = new Dictionary<UUID, USimStatsData>(); |
@@ -308,49 +313,41 @@ namespace OpenSim.Region.UserStatistics | |||
308 | scene.EventManager.OnDeregisterCaps += OnDeRegisterCaps; | 313 | scene.EventManager.OnDeregisterCaps += OnDeRegisterCaps; |
309 | scene.EventManager.OnClientClosed += OnClientClosed; | 314 | scene.EventManager.OnClientClosed += OnClientClosed; |
310 | scene.EventManager.OnMakeRootAgent += OnMakeRootAgent; | 315 | scene.EventManager.OnMakeRootAgent += OnMakeRootAgent; |
311 | scene.EventManager.OnMakeChildAgent += OnMakeChildAgent; | ||
312 | } | 316 | } |
313 | } | 317 | } |
314 | } | 318 | } |
315 | 319 | ||
316 | private void OnMakeRootAgent(ScenePresence agent) | 320 | private void OnMakeRootAgent(ScenePresence agent) |
317 | { | 321 | { |
318 | UUID regionUUID = GetRegionUUIDFromHandle(agent.RegionHandle); | ||
319 | |||
320 | lock (m_sessions) | 322 | lock (m_sessions) |
321 | { | 323 | { |
324 | UserSessionID uid; | ||
325 | |||
322 | if (!m_sessions.ContainsKey(agent.UUID)) | 326 | if (!m_sessions.ContainsKey(agent.UUID)) |
323 | { | 327 | { |
324 | UserSessionData usd = UserSessionUtil.newUserSessionData(); | 328 | UserSessionData usd = UserSessionUtil.newUserSessionData(); |
325 | 329 | uid = new UserSessionID(); | |
326 | UserSessionID uid = new UserSessionID(); | ||
327 | uid.name_f = agent.Firstname; | 330 | uid.name_f = agent.Firstname; |
328 | uid.name_l = agent.Lastname; | 331 | uid.name_l = agent.Lastname; |
329 | uid.region_id = regionUUID; | ||
330 | uid.session_id = agent.ControllingClient.SessionId; | ||
331 | uid.session_data = usd; | 332 | uid.session_data = usd; |
332 | 333 | ||
333 | m_sessions.Add(agent.UUID, uid); | 334 | m_sessions.Add(agent.UUID, uid); |
334 | } | 335 | } |
335 | else | 336 | else |
336 | { | 337 | { |
337 | UserSessionID uid = m_sessions[agent.UUID]; | 338 | uid = m_sessions[agent.UUID]; |
338 | uid.region_id = regionUUID; | ||
339 | uid.session_id = agent.ControllingClient.SessionId; | ||
340 | m_sessions[agent.UUID] = uid; | ||
341 | } | 339 | } |
342 | } | ||
343 | } | ||
344 | 340 | ||
345 | private void OnMakeChildAgent(ScenePresence agent) | 341 | uid.region_id = agent.Scene.RegionInfo.RegionID; |
346 | { | 342 | uid.session_id = agent.ControllingClient.SessionId; |
343 | } | ||
347 | } | 344 | } |
348 | 345 | ||
349 | private void OnClientClosed(UUID agentID, Scene scene) | 346 | private void OnClientClosed(UUID agentID, Scene scene) |
350 | { | 347 | { |
351 | lock (m_sessions) | 348 | lock (m_sessions) |
352 | { | 349 | { |
353 | if (m_sessions.ContainsKey(agentID)) | 350 | if (m_sessions.ContainsKey(agentID) && m_sessions[agentID].region_id == scene.RegionInfo.RegionID) |
354 | { | 351 | { |
355 | m_sessions.Remove(agentID); | 352 | m_sessions.Remove(agentID); |
356 | } | 353 | } |
@@ -395,20 +392,6 @@ namespace OpenSim.Region.UserStatistics | |||
395 | return encoding.GetString(buffer); | 392 | return encoding.GetString(buffer); |
396 | } | 393 | } |
397 | 394 | ||
398 | private UUID GetRegionUUIDFromHandle(ulong regionhandle) | ||
399 | { | ||
400 | lock (m_scenes) | ||
401 | { | ||
402 | foreach (Scene scene in m_scenes) | ||
403 | { | ||
404 | if (scene.RegionInfo.RegionHandle == regionhandle) | ||
405 | return scene.RegionInfo.RegionID; | ||
406 | } | ||
407 | } | ||
408 | |||
409 | return UUID.Zero; | ||
410 | } | ||
411 | |||
412 | /// <summary> | 395 | /// <summary> |
413 | /// Callback for a viewerstats cap | 396 | /// Callback for a viewerstats cap |
414 | /// </summary> | 397 | /// </summary> |