aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Monitoring/Watchdog.cs6
-rw-r--r--OpenSim/Framework/PrimitiveBaseShape.cs43
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs19
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs10
-rw-r--r--OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs2
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs1
-rwxr-xr-xOpenSim/Region/Framework/Scenes/Scene.cs31
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs1
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs121
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs24
-rw-r--r--OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs2
-rw-r--r--bin/OpenSim.ini.example17
14 files changed, 178 insertions, 107 deletions
diff --git a/OpenSim/Framework/Monitoring/Watchdog.cs b/OpenSim/Framework/Monitoring/Watchdog.cs
index 5fb725c..9cac451 100644
--- a/OpenSim/Framework/Monitoring/Watchdog.cs
+++ b/OpenSim/Framework/Monitoring/Watchdog.cs
@@ -254,14 +254,12 @@ namespace OpenSim.Framework.Monitoring
254 254
255 twi.Cleanup(); 255 twi.Cleanup();
256 m_threads.Remove(threadID); 256 m_threads.Remove(threadID);
257
258 return true; 257 return true;
259 } 258 }
260 else 259 else
261 { 260 {
262 m_log.WarnFormat( 261 m_log.WarnFormat(
263 "[WATCHDOG]: Requested to remove thread with ID {0} but this is not being monitored", threadID); 262 "[WATCHDOG]: Requested to remove thread with ID {0} but this is not being monitored", threadID);
264
265 return false; 263 return false;
266 } 264 }
267 } 265 }
@@ -360,7 +358,7 @@ namespace OpenSim.Framework.Monitoring
360 List<ThreadWatchdogInfo> callbackInfos = null; 358 List<ThreadWatchdogInfo> callbackInfos = null;
361 List<ThreadWatchdogInfo> threadsToRemove = null; 359 List<ThreadWatchdogInfo> threadsToRemove = null;
362 360
363 const ThreadState thgone = ThreadState.Stopped | ThreadState.Aborted | ThreadState.AbortRequested; 361 const ThreadState thgone = ThreadState.Stopped;
364 362
365 lock (m_threads) 363 lock (m_threads)
366 { 364 {
@@ -368,7 +366,7 @@ namespace OpenSim.Framework.Monitoring
368 { 366 {
369 if(!m_enabled) 367 if(!m_enabled)
370 return; 368 return;
371 if(!threadInfo.Thread.IsAlive || (threadInfo.Thread.ThreadState & thgone) != 0) 369 if((threadInfo.Thread.ThreadState & thgone) != 0)
372 { 370 {
373 if(threadsToRemove == null) 371 if(threadsToRemove == null)
374 threadsToRemove = new List<ThreadWatchdogInfo>(); 372 threadsToRemove = new List<ThreadWatchdogInfo>();
diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs
index a830551..96d78d3 100644
--- a/OpenSim/Framework/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/PrimitiveBaseShape.cs
@@ -1580,35 +1580,48 @@ namespace OpenSim.Framework
1580 { 1580 {
1581 MediaList ml = new MediaList(); 1581 MediaList ml = new MediaList();
1582 ml.ReadXml(rawXml); 1582 ml.ReadXml(rawXml);
1583 if(ml.Count == 0)
1584 return null;
1583 return ml; 1585 return ml;
1584 } 1586 }
1585 1587
1586 public void ReadXml(string rawXml) 1588 public void ReadXml(string rawXml)
1587 { 1589 {
1588 using (StringReader sr = new StringReader(rawXml)) 1590 try
1589 { 1591 {
1590 using (XmlTextReader xtr = new XmlTextReader(sr)) 1592 using (StringReader sr = new StringReader(rawXml))
1591 { 1593 {
1592 xtr.MoveToContent(); 1594 using (XmlTextReader xtr = new XmlTextReader(sr))
1595 {
1596 xtr.MoveToContent();
1593 1597
1594 string type = xtr.GetAttribute("type"); 1598 string type = xtr.GetAttribute("type");
1595 //m_log.DebugFormat("[MOAP]: Loaded media texture entry with type {0}", type); 1599 //m_log.DebugFormat("[MOAP]: Loaded media texture entry with type {0}", type);
1596 1600
1597 if (type != MEDIA_TEXTURE_TYPE) 1601 if (type != MEDIA_TEXTURE_TYPE)
1598 return; 1602 return;
1599 1603
1600 xtr.ReadStartElement("OSMedia"); 1604 xtr.ReadStartElement("OSMedia");
1605 OSD osdp = OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml());
1606 if(osdp == null || !(osdp is OSDArray))
1607 return;
1601 1608
1602 OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml()); 1609 OSDArray osdMeArray = osdp as OSDArray;
1603 foreach (OSD osdMe in osdMeArray) 1610 if(osdMeArray.Count == 0)
1604 { 1611 return;
1605 MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry());
1606 Add(me);
1607 }
1608 1612
1609 xtr.ReadEndElement(); 1613 foreach (OSD osdMe in osdMeArray)
1614 {
1615 MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry());
1616 Add(me);
1617 }
1618 }
1610 } 1619 }
1611 } 1620 }
1621 catch
1622 {
1623 m_log.Debug("PrimitiveBaseShape] error decoding MOAP xml" );
1624 }
1612 } 1625 }
1613 1626
1614 public void ReadXml(XmlReader reader) 1627 public void ReadXml(XmlReader reader)
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index e1b9e08..6f5775a 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -1577,7 +1577,10 @@ namespace OpenSim.Region.ClientStack.Linden
1577 break; 1577 break;
1578 1578
1579 m_Scene.TryGetScenePresence(m_AgentID, out sp); 1579 m_Scene.TryGetScenePresence(m_AgentID, out sp);
1580 if(sp == null || sp.IsChildAgent || sp.IsDeleted || sp.IsInTransit) 1580 if(sp == null || sp.IsChildAgent || sp.IsDeleted)
1581 break;
1582
1583 if(sp.IsInTransit && !sp.IsInLocalTransit)
1581 break; 1584 break;
1582 1585
1583 client = sp.ControllingClient; 1586 client = sp.ControllingClient;
@@ -1699,7 +1702,10 @@ namespace OpenSim.Region.ClientStack.Linden
1699 break; 1702 break;
1700 1703
1701 m_Scene.TryGetScenePresence(m_AgentID, out sp); 1704 m_Scene.TryGetScenePresence(m_AgentID, out sp);
1702 if(sp == null || sp.IsChildAgent || sp.IsDeleted || sp.IsInTransit) 1705 if(sp == null || sp.IsChildAgent || sp.IsDeleted)
1706 break;
1707
1708 if(sp.IsInTransit && !sp.IsInLocalTransit)
1703 break; 1709 break;
1704 1710
1705 client = sp.ControllingClient; 1711 client = sp.ControllingClient;
@@ -1807,7 +1813,7 @@ namespace OpenSim.Region.ClientStack.Linden
1807 if(sp == null || sp.IsDeleted) 1813 if(sp == null || sp.IsDeleted)
1808 return ""; 1814 return "";
1809 1815
1810 if(sp.IsInTransit) 1816 if(sp.IsInTransit && !sp.IsInLocalTransit)
1811 { 1817 {
1812 httpResponse.StatusCode = (int)System.Net.HttpStatusCode.ServiceUnavailable; 1818 httpResponse.StatusCode = (int)System.Net.HttpStatusCode.ServiceUnavailable;
1813 httpResponse.AddHeader("Retry-After","30"); 1819 httpResponse.AddHeader("Retry-After","30");
@@ -1817,7 +1823,6 @@ namespace OpenSim.Region.ClientStack.Linden
1817 NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query); 1823 NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
1818 string[] ids = query.GetValues("ids"); 1824 string[] ids = query.GetValues("ids");
1819 1825
1820
1821 Dictionary<UUID,string> names = m_UserManager.GetUsersNames(ids); 1826 Dictionary<UUID,string> names = m_UserManager.GetUsersNames(ids);
1822 1827
1823 OSDMap osdReply = new OSDMap(); 1828 OSDMap osdReply = new OSDMap();
@@ -1833,12 +1838,18 @@ namespace OpenSim.Region.ClientStack.Linden
1833 1838
1834 string[] parts = kvp.Value.Split(new char[] {' '}); 1839 string[] parts = kvp.Value.Split(new char[] {' '});
1835 OSDMap osdname = new OSDMap(); 1840 OSDMap osdname = new OSDMap();
1841
1842 // dont tell about unknown users, we can't send them back on Bad either
1843 if(parts[0] == "Unknown")
1844 continue;
1845/*
1836 if(parts[0] == "Unknown") 1846 if(parts[0] == "Unknown")
1837 { 1847 {
1838 osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddHours(1)); 1848 osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddHours(1));
1839 osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddHours(2)); 1849 osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddHours(2));
1840 } 1850 }
1841 else 1851 else
1852*/
1842 { 1853 {
1843 osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddDays(8)); 1854 osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddDays(8));
1844 osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddMonths(1)); 1855 osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddMonths(1));
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index f658a70..1091078 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -6473,8 +6473,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
6473 6473
6474 private bool HandleUUIDGroupNameRequest(IClientAPI sender, Packet Pack) 6474 private bool HandleUUIDGroupNameRequest(IClientAPI sender, Packet Pack)
6475 { 6475 {
6476 UUIDGroupNameRequestPacket upack = (UUIDGroupNameRequestPacket)Pack; 6476 ScenePresence sp = (ScenePresence)SceneAgent;
6477 if(sp == null || sp.IsDeleted || (sp.IsInTransit && !sp.IsInLocalTransit))
6478 return true;
6477 6479
6480 UUIDGroupNameRequestPacket upack = (UUIDGroupNameRequestPacket)Pack;
6478 6481
6479 for (int i = 0; i < upack.UUIDNameBlock.Length; i++) 6482 for (int i = 0; i < upack.UUIDNameBlock.Length; i++)
6480 { 6483 {
@@ -7493,7 +7496,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7493 SendUserInfoReply(false, true, ""); 7496 SendUserInfoReply(false, true, "");
7494 } 7497 }
7495 return true; 7498 return true;
7496
7497 } 7499 }
7498 7500
7499 private bool HandleUpdateUserInfo(IClientAPI sender, Packet Pack) 7501 private bool HandleUpdateUserInfo(IClientAPI sender, Packet Pack)
@@ -9648,6 +9650,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9648 9650
9649 private bool HandleUUIDNameRequest(IClientAPI sender, Packet Pack) 9651 private bool HandleUUIDNameRequest(IClientAPI sender, Packet Pack)
9650 { 9652 {
9653 ScenePresence sp = (ScenePresence)SceneAgent;
9654 if(sp == null || sp.IsDeleted || (sp.IsInTransit && !sp.IsInLocalTransit))
9655 return true;
9656
9651 UUIDNameRequestPacket incoming = (UUIDNameRequestPacket)Pack; 9657 UUIDNameRequestPacket incoming = (UUIDNameRequestPacket)Pack;
9652 9658
9653 foreach (UUIDNameRequestPacket.UUIDNameBlockBlock UUIDBlock in incoming.UUIDNameBlock) 9659 foreach (UUIDNameRequestPacket.UUIDNameBlockBlock UUIDBlock in incoming.UUIDNameBlock)
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
index e5ac17d..f2fc070 100644
--- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
@@ -1168,7 +1168,7 @@ namespace OpenSim.Region.CoreModules.Asset
1168 1168
1169 con.Output("FloatSam Ensuring assets are cached for all scenes."); 1169 con.Output("FloatSam Ensuring assets are cached for all scenes.");
1170 1170
1171 WorkManager.RunInThread(delegate 1171 WorkManager.RunInThreadPool(delegate
1172 { 1172 {
1173 bool wasRunning= false; 1173 bool wasRunning= false;
1174 lock(timerLock) 1174 lock(timerLock)
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 99bebdd..c93c54d 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -771,8 +771,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
771 else if (sp.Flying) 771 else if (sp.Flying)
772 teleportFlags |= (uint)TeleportFlags.IsFlying; 772 teleportFlags |= (uint)TeleportFlags.IsFlying;
773 773
774 sp.IsInLocalTransit = finalDestination.RegionLocY != 0; // HG
774 sp.IsInTransit = true; 775 sp.IsInTransit = true;
775 776
777
776 if (DisableInterRegionTeleportCancellation) 778 if (DisableInterRegionTeleportCancellation)
777 teleportFlags |= (uint)TeleportFlags.DisableCancel; 779 teleportFlags |= (uint)TeleportFlags.DisableCancel;
778 780
@@ -1524,6 +1526,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1524 1526
1525 public bool Cross(ScenePresence agent, bool isFlying) 1527 public bool Cross(ScenePresence agent, bool isFlying)
1526 { 1528 {
1529 agent.IsInLocalTransit = true;
1527 agent.IsInTransit = true; 1530 agent.IsInTransit = true;
1528 CrossAsyncDelegate d = CrossAsync; 1531 CrossAsyncDelegate d = CrossAsync;
1529 d.BeginInvoke(agent, isFlying, CrossCompleted, d); 1532 d.BeginInvoke(agent, isFlying, CrossCompleted, d);
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index 32cb5a3..2695464 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -175,6 +175,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
175 { 175 {
176 client.OnNameFromUUIDRequest -= new UUIDNameRequest(HandleUUIDNameRequest); 176 client.OnNameFromUUIDRequest -= new UUIDNameRequest(HandleUUIDNameRequest);
177 client.OnAvatarPickerRequest -= new AvatarPickerRequest(HandleAvatarPickerRequest); 177 client.OnAvatarPickerRequest -= new AvatarPickerRequest(HandleAvatarPickerRequest);
178 client.OnConnectionClosed -= new Action<IClientAPI>(HandleConnectionClosed);
178 } 179 }
179 180
180 protected virtual void HandleUUIDNameRequest(UUID uuid, IClientAPI client) 181 protected virtual void HandleUUIDNameRequest(UUID uuid, IClientAPI client)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index e1e06d0..ebef158 100755
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -394,6 +394,7 @@ namespace OpenSim.Region.Framework.Scenes
394 /// asynchronously from the update loop. 394 /// asynchronously from the update loop.
395 /// </summary> 395 /// </summary>
396 private bool m_cleaningTemps = false; 396 private bool m_cleaningTemps = false;
397 private bool m_sendingCoarseLocations = false; // same for async course locations sending
397 398
398 /// <summary> 399 /// <summary>
399 /// Used to control main scene thread looping time when not updating via timer. 400 /// Used to control main scene thread looping time when not updating via timer.
@@ -1654,18 +1655,24 @@ namespace OpenSim.Region.Framework.Scenes
1654 if (Frame % m_update_entitymovement == 0) 1655 if (Frame % m_update_entitymovement == 0)
1655 m_sceneGraph.UpdateScenePresenceMovement(); 1656 m_sceneGraph.UpdateScenePresenceMovement();
1656 1657
1657 if (Frame % (m_update_coarse_locations) == 0) 1658 if (Frame % (m_update_coarse_locations) == 0 && !m_sendingCoarseLocations)
1658 { 1659 {
1659 List<Vector3> coarseLocations; 1660 m_sendingCoarseLocations = true;
1660 List<UUID> avatarUUIDs; 1661 WorkManager.RunInThreadPool(
1661 1662 delegate
1662 SceneGraph.GetCoarseLocations(out coarseLocations, out avatarUUIDs, 60); 1663 {
1663 // Send coarse locations to clients 1664 List<Vector3> coarseLocations;
1664 ForEachScenePresence(delegate(ScenePresence presence) 1665 List<UUID> avatarUUIDs;
1665 { 1666 SceneGraph.GetCoarseLocations(out coarseLocations, out avatarUUIDs, 60);
1666 presence.SendCoarseLocations(coarseLocations, avatarUUIDs); 1667 // Send coarse locations to clients
1667 }); 1668 ForEachScenePresence(delegate(ScenePresence presence)
1669 {
1670 presence.SendCoarseLocations(coarseLocations, avatarUUIDs);
1671 });
1672 m_sendingCoarseLocations = false;
1673 }, null, string.Format("SendCoarseLocations ({0})", Name));
1668 } 1674 }
1675
1669 // Get the simulation frame time that the avatar force input 1676 // Get the simulation frame time that the avatar force input
1670 // took 1677 // took
1671 tmpMS2 = Util.GetTimeStampMS(); 1678 tmpMS2 = Util.GetTimeStampMS();
@@ -1708,7 +1715,7 @@ namespace OpenSim.Region.Framework.Scenes
1708 if (Frame % m_update_temp_cleaning == 0 && !m_cleaningTemps) 1715 if (Frame % m_update_temp_cleaning == 0 && !m_cleaningTemps)
1709 { 1716 {
1710 m_cleaningTemps = true; 1717 m_cleaningTemps = true;
1711 WorkManager.RunInThread( 1718 WorkManager.RunInThreadPool(
1712 delegate { CleanTempObjects(); m_cleaningTemps = false; }, null, string.Format("CleanTempObjects ({0})", Name)); 1719 delegate { CleanTempObjects(); m_cleaningTemps = false; }, null, string.Format("CleanTempObjects ({0})", Name));
1713 tmpMS2 = Util.GetTimeStampMS(); 1720 tmpMS2 = Util.GetTimeStampMS();
1714 tempOnRezMS = (float)(tmpMS2 - tmpMS); // bad.. counts the FireAndForget, not CleanTempObjects 1721 tempOnRezMS = (float)(tmpMS2 - tmpMS); // bad.. counts the FireAndForget, not CleanTempObjects
@@ -1936,7 +1943,7 @@ namespace OpenSim.Region.Framework.Scenes
1936 if (!m_backingup) 1943 if (!m_backingup)
1937 { 1944 {
1938 m_backingup = true; 1945 m_backingup = true;
1939 WorkManager.RunInThread(o => Backup(false), null, string.Format("BackupWorker ({0})", Name)); 1946 WorkManager.RunInThreadPool(o => Backup(false), null, string.Format("BackupWorker ({0})", Name));
1940 } 1947 }
1941 } 1948 }
1942 1949
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 93c9b42..1695d9b 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -807,6 +807,7 @@ namespace OpenSim.Region.Framework.Scenes
807 foreach (avtocrossInfo avinfo in avsToCross) 807 foreach (avtocrossInfo avinfo in avsToCross)
808 { 808 {
809 ScenePresence av = avinfo.av; 809 ScenePresence av = avinfo.av;
810 av.IsInLocalTransit = true;
810 av.IsInTransit = true; 811 av.IsInTransit = true;
811 m_log.DebugFormat("[SCENE OBJECT]: Crossing avatar {0} to {1}", av.Name, val); 812 m_log.DebugFormat("[SCENE OBJECT]: Crossing avatar {0} to {1}", av.Name, val);
812 813
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 60efc04..d8f2b80 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -91,7 +91,8 @@ namespace OpenSim.Region.Framework.Scenes
91 /// </value> 91 /// </value>
92 protected internal TaskInventoryDictionary Items 92 protected internal TaskInventoryDictionary Items
93 { 93 {
94 get { 94 get
95 {
95 return m_items; 96 return m_items;
96 } 97 }
97 set 98 set
@@ -141,45 +142,53 @@ namespace OpenSim.Region.Framework.Scenes
141 /// </remarks> 142 /// </remarks>
142 public void ResetInventoryIDs() 143 public void ResetInventoryIDs()
143 { 144 {
144 if (null == m_part) 145 if (m_part == null)
145 m_items.LockItemsForWrite(true); 146 return;
146 147
147 if (Items.Count == 0) 148 m_items.LockItemsForWrite(true);
149 if (m_items.Count == 0)
148 { 150 {
149 m_items.LockItemsForWrite(false); 151 m_items.LockItemsForWrite(false);
150 return; 152 return;
151 } 153 }
152 154
153 IList<TaskInventoryItem> items = new List<TaskInventoryItem>(Items.Values); 155 UUID partID = m_part.UUID;
154 Items.Clear(); 156 IList<TaskInventoryItem> items = new List<TaskInventoryItem>(m_items.Values);
157 m_items.Clear();
155 158
156 foreach (TaskInventoryItem item in items) 159 foreach (TaskInventoryItem item in items)
157 { 160 {
158 item.ResetIDs(m_part.UUID); 161 item.ResetIDs(partID);
159 Items.Add(item.ItemID, item); 162 m_items.Add(item.ItemID, item);
160 } 163 }
164 m_inventorySerial++;
161 m_items.LockItemsForWrite(false); 165 m_items.LockItemsForWrite(false);
162 } 166 }
163 167
164 public void ResetObjectID() 168 public void ResetObjectID()
165 { 169 {
170 if (m_part == null)
171 return;
172
166 m_items.LockItemsForWrite(true); 173 m_items.LockItemsForWrite(true);
167 174
168 if (Items.Count == 0) 175 if (m_items.Count == 0)
169 { 176 {
170 m_items.LockItemsForWrite(false); 177 m_items.LockItemsForWrite(false);
171 return; 178 return;
172 } 179 }
173 180
174 IList<TaskInventoryItem> items = new List<TaskInventoryItem>(Items.Values); 181 IList<TaskInventoryItem> items = new List<TaskInventoryItem>(m_items.Values);
175 Items.Clear(); 182 m_items.Clear();
176 183
184 UUID partID = m_part.UUID;
177 foreach (TaskInventoryItem item in items) 185 foreach (TaskInventoryItem item in items)
178 { 186 {
179 item.ParentPartID = m_part.UUID; 187 item.ParentPartID = partID;
180 item.ParentID = m_part.UUID; 188 item.ParentID = partID;
181 Items.Add(item.ItemID, item); 189 m_items.Add(item.ItemID, item);
182 } 190 }
191 m_inventorySerial++;
183 m_items.LockItemsForWrite(false); 192 m_items.LockItemsForWrite(false);
184 } 193 }
185 194
@@ -189,15 +198,17 @@ namespace OpenSim.Region.Framework.Scenes
189 /// <param name="ownerId"></param> 198 /// <param name="ownerId"></param>
190 public void ChangeInventoryOwner(UUID ownerId) 199 public void ChangeInventoryOwner(UUID ownerId)
191 { 200 {
192 List<TaskInventoryItem> items = GetInventoryItems(); 201 if(m_part == null)
193
194 if (items.Count == 0)
195 return; 202 return;
196 203
197 m_items.LockItemsForWrite(true); 204 m_items.LockItemsForWrite(true);
198 HasInventoryChanged = true; 205 if (m_items.Count == 0)
199 m_part.ParentGroup.HasGroupChanged = true; 206 {
200 foreach (TaskInventoryItem item in items) 207 m_items.LockItemsForWrite(false);
208 return;
209 }
210
211 foreach (TaskInventoryItem item in m_items.Values)
201 { 212 {
202 if (ownerId != item.OwnerID) 213 if (ownerId != item.OwnerID)
203 item.LastOwnerID = item.OwnerID; 214 item.LastOwnerID = item.OwnerID;
@@ -207,6 +218,8 @@ namespace OpenSim.Region.Framework.Scenes
207 item.PermsGranter = UUID.Zero; 218 item.PermsGranter = UUID.Zero;
208 item.OwnerChanged = true; 219 item.OwnerChanged = true;
209 } 220 }
221 HasInventoryChanged = true;
222 m_part.ParentGroup.HasGroupChanged = true;
210 m_inventorySerial++; 223 m_inventorySerial++;
211 m_items.LockItemsForWrite(false); 224 m_items.LockItemsForWrite(false);
212 } 225 }
@@ -217,8 +230,11 @@ namespace OpenSim.Region.Framework.Scenes
217 /// <param name="groupID"></param> 230 /// <param name="groupID"></param>
218 public void ChangeInventoryGroup(UUID groupID) 231 public void ChangeInventoryGroup(UUID groupID)
219 { 232 {
233 if(m_part == null)
234 return;
235
220 m_items.LockItemsForWrite(true); 236 m_items.LockItemsForWrite(true);
221 if (0 == Items.Count) 237 if (m_items.Count == 0)
222 { 238 {
223 m_items.LockItemsForWrite(false); 239 m_items.LockItemsForWrite(false);
224 return; 240 return;
@@ -233,11 +249,9 @@ namespace OpenSim.Region.Framework.Scenes
233 m_part.ParentGroup.HasGroupChanged = true; 249 m_part.ParentGroup.HasGroupChanged = true;
234 } 250 }
235 251
236 IList<TaskInventoryItem> items = new List<TaskInventoryItem>(Items.Values); 252 foreach (TaskInventoryItem item in m_items.Values)
237 foreach (TaskInventoryItem item in items)
238 {
239 item.GroupID = groupID; 253 item.GroupID = groupID;
240 } 254
241 m_items.LockItemsForWrite(false); 255 m_items.LockItemsForWrite(false);
242 } 256 }
243 257
@@ -246,8 +260,8 @@ namespace OpenSim.Region.Framework.Scenes
246 if (m_part == null || m_part.ParentGroup == null || m_part.ParentGroup.Scene == null) 260 if (m_part == null || m_part.ParentGroup == null || m_part.ParentGroup.Scene == null)
247 return; 261 return;
248 262
249 Items.LockItemsForRead(true); 263 m_items.LockItemsForRead(true);
250 foreach (TaskInventoryItem item in Items.Values) 264 foreach (TaskInventoryItem item in m_items.Values)
251 { 265 {
252 if (item.InvType == (int)InventoryType.LSL) 266 if (item.InvType == (int)InventoryType.LSL)
253 { 267 {
@@ -257,7 +271,7 @@ namespace OpenSim.Region.Framework.Scenes
257 } 271 }
258 } 272 }
259 273
260 Items.LockItemsForRead(false); 274 m_items.LockItemsForRead(false);
261 } 275 }
262 276
263 public bool TryGetScriptInstanceRunning(UUID itemId, out bool running) 277 public bool TryGetScriptInstanceRunning(UUID itemId, out bool running)
@@ -345,7 +359,9 @@ namespace OpenSim.Region.Framework.Scenes
345 /// </summary> 359 /// </summary>
346 public void StopScriptInstances() 360 public void StopScriptInstances()
347 { 361 {
348 GetInventoryItems(InventoryType.LSL).ForEach(i => StopScriptInstance(i)); 362 List<TaskInventoryItem> scripts = GetInventoryItems(InventoryType.LSL);
363 foreach (TaskInventoryItem item in scripts)
364 StopScriptInstance(item);
349 } 365 }
350 366
351 /// <summary> 367 /// <summary>
@@ -807,7 +823,6 @@ namespace OpenSim.Region.Framework.Scenes
807 823
808 m_part.AggregateInnerPerms(); 824 m_part.AggregateInnerPerms();
809 m_inventorySerial++; 825 m_inventorySerial++;
810 //m_inventorySerial += 2;
811 HasInventoryChanged = true; 826 HasInventoryChanged = true;
812 m_part.ParentGroup.HasGroupChanged = true; 827 m_part.ParentGroup.HasGroupChanged = true;
813 } 828 }
@@ -1126,18 +1141,18 @@ namespace OpenSim.Region.Framework.Scenes
1126 { 1141 {
1127 bool changed = false; 1142 bool changed = false;
1128 1143
1129 Items.LockItemsForRead(true); 1144 m_items.LockItemsForRead(true);
1130 1145
1131 if (m_inventorySerial == 0) // No inventory 1146 if (m_inventorySerial == 0) // No inventory
1132 { 1147 {
1133 Items.LockItemsForRead(false); 1148 m_items.LockItemsForRead(false);
1134 client.SendTaskInventory(m_part.UUID, 0, new byte[0]); 1149 client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
1135 return; 1150 return;
1136 } 1151 }
1137 1152
1138 if (m_items.Count == 0) // No inventory 1153 if (m_items.Count == 0) // No inventory
1139 { 1154 {
1140 Items.LockItemsForRead(false); 1155 m_items.LockItemsForRead(false);
1141 client.SendTaskInventory(m_part.UUID, 0, new byte[0]); 1156 client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
1142 return; 1157 return;
1143 } 1158 }
@@ -1148,7 +1163,7 @@ namespace OpenSim.Region.Framework.Scenes
1148 changed = true; 1163 changed = true;
1149 } 1164 }
1150 1165
1151 Items.LockItemsForRead(false); 1166 m_items.LockItemsForRead(false);
1152 1167
1153 if (m_inventoryFileData.Length < 2) 1168 if (m_inventoryFileData.Length < 2)
1154 changed = true; 1169 changed = true;
@@ -1173,7 +1188,7 @@ namespace OpenSim.Region.Framework.Scenes
1173 1188
1174 InventoryStringBuilder invString = new InventoryStringBuilder(m_part.UUID, UUID.Zero); 1189 InventoryStringBuilder invString = new InventoryStringBuilder(m_part.UUID, UUID.Zero);
1175 1190
1176 Items.LockItemsForRead(true); 1191 m_items.LockItemsForRead(true);
1177 1192
1178 foreach (TaskInventoryItem item in m_items.Values) 1193 foreach (TaskInventoryItem item in m_items.Values)
1179 { 1194 {
@@ -1234,7 +1249,7 @@ namespace OpenSim.Region.Framework.Scenes
1234 invString.AddSectionEnd(); 1249 invString.AddSectionEnd();
1235 } 1250 }
1236 1251
1237 Items.LockItemsForRead(false); 1252 m_items.LockItemsForRead(false);
1238 1253
1239 m_inventoryFileData = Utils.StringToBytes(invString.GetString()); 1254 m_inventoryFileData = Utils.StringToBytes(invString.GetString());
1240 1255
@@ -1264,10 +1279,10 @@ namespace OpenSim.Region.Framework.Scenes
1264// of prim inventory loss. 1279// of prim inventory loss.
1265// if (HasInventoryChanged) 1280// if (HasInventoryChanged)
1266// { 1281// {
1267 Items.LockItemsForRead(true); 1282 m_items.LockItemsForRead(true);
1268 ICollection<TaskInventoryItem> itemsvalues = Items.Values; 1283 ICollection<TaskInventoryItem> itemsvalues = m_items.Values;
1269 HasInventoryChanged = false; 1284 HasInventoryChanged = false;
1270 Items.LockItemsForRead(false); 1285 m_items.LockItemsForRead(false);
1271 try 1286 try
1272 { 1287 {
1273 datastore.StorePrimInventory(m_part.UUID, itemsvalues); 1288 datastore.StorePrimInventory(m_part.UUID, itemsvalues);
@@ -1434,15 +1449,13 @@ namespace OpenSim.Region.Framework.Scenes
1434 public int ScriptCount() 1449 public int ScriptCount()
1435 { 1450 {
1436 int count = 0; 1451 int count = 0;
1437 Items.LockItemsForRead(true); 1452 m_items.LockItemsForRead(true);
1438 foreach (TaskInventoryItem item in m_items.Values) 1453 foreach (TaskInventoryItem item in m_items.Values)
1439 { 1454 {
1440 if (item.InvType == (int)InventoryType.LSL) 1455 if (item.InvType == (int)InventoryType.LSL)
1441 {
1442 count++; 1456 count++;
1443 } 1457 }
1444 } 1458 m_items.LockItemsForRead(false);
1445 Items.LockItemsForRead(false);
1446 return count; 1459 return count;
1447 } 1460 }
1448 /// <summary> 1461 /// <summary>
@@ -1465,48 +1478,44 @@ namespace OpenSim.Region.Framework.Scenes
1465 if (engine != null) 1478 if (engine != null)
1466 { 1479 {
1467 if (engine.GetScriptState(item.ItemID)) 1480 if (engine.GetScriptState(item.ItemID))
1468 {
1469 count++; 1481 count++;
1470 } 1482 }
1471 } 1483 }
1472 } 1484 }
1473 }
1474 return count; 1485 return count;
1475 } 1486 }
1476 1487
1477 public List<UUID> GetInventoryList() 1488 public List<UUID> GetInventoryList()
1478 { 1489 {
1479 List<UUID> ret = new List<UUID>(); 1490 m_items.LockItemsForRead(true);
1480 1491
1492 List<UUID> ret = new List<UUID>(m_items.Count);
1481 foreach (TaskInventoryItem item in m_items.Values) 1493 foreach (TaskInventoryItem item in m_items.Values)
1482 ret.Add(item.ItemID); 1494 ret.Add(item.ItemID);
1483 1495
1496 m_items.LockItemsForRead(false);
1484 return ret; 1497 return ret;
1485 } 1498 }
1486 1499
1487 public List<TaskInventoryItem> GetInventoryItems() 1500 public List<TaskInventoryItem> GetInventoryItems()
1488 { 1501 {
1489 List<TaskInventoryItem> ret = new List<TaskInventoryItem>(); 1502 m_items.LockItemsForRead(true);
1490 1503 List<TaskInventoryItem> ret = new List<TaskInventoryItem>(m_items.Values);
1491 Items.LockItemsForRead(true); 1504 m_items.LockItemsForRead(false);
1492 ret = new List<TaskInventoryItem>(m_items.Values);
1493 Items.LockItemsForRead(false);
1494 1505
1495 return ret; 1506 return ret;
1496 } 1507 }
1497 1508
1498 public List<TaskInventoryItem> GetInventoryItems(InventoryType type) 1509 public List<TaskInventoryItem> GetInventoryItems(InventoryType type)
1499 { 1510 {
1500 List<TaskInventoryItem> ret = new List<TaskInventoryItem>(); 1511 m_items.LockItemsForRead(true);
1501
1502 Items.LockItemsForRead(true);
1503 1512
1513 List<TaskInventoryItem> ret = new List<TaskInventoryItem>(m_items.Count);
1504 foreach (TaskInventoryItem item in m_items.Values) 1514 foreach (TaskInventoryItem item in m_items.Values)
1505 if (item.InvType == (int)type) 1515 if (item.InvType == (int)type)
1506 ret.Add(item); 1516 ret.Add(item);
1507 1517
1508 Items.LockItemsForRead(false); 1518 m_items.LockItemsForRead(false);
1509
1510 return ret; 1519 return ret;
1511 } 1520 }
1512 1521
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index daa9e50..47af3b8 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -971,6 +971,10 @@ namespace OpenSim.Region.Framework.Scenes
971 m_inTransit = value; 971 m_inTransit = value;
972 } 972 }
973 } 973 }
974 // this is is only valid if IsInTransit is true
975 // only false on HG tps
976 // used work arounf viewers asking source region about destination user
977 public bool IsInLocalTransit {get; set; }
974 978
975 979
976 /// <summary> 980 /// <summary>
@@ -1040,6 +1044,7 @@ namespace OpenSim.Region.Framework.Scenes
1040 m_uuid = client.AgentId; 1044 m_uuid = client.AgentId;
1041 LocalId = m_scene.AllocateLocalId(); 1045 LocalId = m_scene.AllocateLocalId();
1042 LegacySitOffsets = m_scene.LegacySitOffsets; 1046 LegacySitOffsets = m_scene.LegacySitOffsets;
1047 IsInLocalTransit = true;
1043 1048
1044 UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, m_uuid); 1049 UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, m_uuid);
1045 if (account != null) 1050 if (account != null)
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index b1b1fc5..b012a08 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -1361,9 +1361,27 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1361 1361
1362 private static void ProcessShpMedia(PrimitiveBaseShape shp, XmlReader reader) 1362 private static void ProcessShpMedia(PrimitiveBaseShape shp, XmlReader reader)
1363 { 1363 {
1364 // Get inner XML and pass to MediaList parser 1364 string value = String.Empty;
1365 string value = reader.ReadInnerXml(); 1365 try
1366 shp.Media = PrimitiveBaseShape.MediaList.FromXml(value); 1366 {
1367 // The STANDARD content of Media elemet is escaped XML string (with &gt; etc).
1368 value = reader.ReadElementContentAsString("Media", String.Empty);
1369 shp.Media = PrimitiveBaseShape.MediaList.FromXml(value);
1370 }
1371 catch (XmlException e)
1372 {
1373 // There are versions of OAR files that contain unquoted XML.
1374 // ie ONE comercial fork that never wanted their oars to be read by our code
1375 try
1376 {
1377 value = reader.ReadInnerXml();
1378 shp.Media = PrimitiveBaseShape.MediaList.FromXml(value);
1379 }
1380 catch
1381 {
1382 m_log.ErrorFormat("[SERIALIZER] Failed parsing halcyon MOAP information");
1383 }
1384 }
1367 } 1385 }
1368 1386
1369 #endregion 1387 #endregion
diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs
index 923e2ff..a5ee2c9 100644
--- a/OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs
+++ b/OpenSim/Region/PhysicsModules/ubOde/ODEMeshWorker.cs
@@ -936,7 +936,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
936 repData.actor.Name, asset.ID.ToString()); 936 repData.actor.Name, asset.ID.ToString());
937 } 937 }
938 else 938 else
939 m_log.WarnFormat("[PHYSICS]: asset provider returned null asset fo mesh of prim {0}.", 939 m_log.WarnFormat("[PHYSICS]: asset provider returned null asset for mesh of prim {0}.",
940 repData.actor.Name); 940 repData.actor.Name);
941 } 941 }
942 } 942 }
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index 3482270..f1dcbd3 100644
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -138,7 +138,7 @@
138 ;; The XML here has the same format as it does on the filesystem 138 ;; The XML here has the same format as it does on the filesystem
139 ;; (including the <Root> tag), except that everything is also enclosed 139 ;; (including the <Root> tag), except that everything is also enclosed
140 ;; in a <Regions> tag. 140 ;; in a <Regions> tag.
141 ; regionload_webserver_url = "http://example.com/regions.xml"; 141 ; regionload_webserver_url = "http://example.com/regions.xml"
142 142
143 ;# {allow_regionless} {} {Allow simulator to start up with no regions configured.} {true false} false 143 ;# {allow_regionless} {} {Allow simulator to start up with no regions configured.} {true false} false
144 ;; Allow the simulator to start up if there are no region configuration available 144 ;; Allow the simulator to start up if there are no region configuration available
@@ -286,8 +286,8 @@
286 ;; SpawnPointRouting adjusts the landing for incoming avatars. 286 ;; SpawnPointRouting adjusts the landing for incoming avatars.
287 ;; "closest" will place the avatar at the SpawnPoint located in the closest 287 ;; "closest" will place the avatar at the SpawnPoint located in the closest
288 ;; available spot to the destination (typically map click/landmark). 288 ;; available spot to the destination (typically map click/landmark).
289 ;; "random" will place the avatar on a randomly selected spawnpoint; 289 ;; "random" will place the avatar on a randomly selected spawnpoint.
290 ;; "sequence" will place the avatar on the next sequential SpawnPoint 290 ;; "sequence" will place the avatar on the next sequential SpawnPoint.
291 ; SpawnPointRouting = closest 291 ; SpawnPointRouting = closest
292 292
293 ;# {TelehubAllowLandmark} {} {Allow users with landmarks to override telehub routing} {true false} false 293 ;# {TelehubAllowLandmark} {} {Allow users with landmarks to override telehub routing} {true false} false
@@ -375,8 +375,8 @@
375 ; TexturePrimSize = 48 375 ; TexturePrimSize = 48
376 376
377 ;# {RenderMeshes} {} {Render meshes and sculpties on map tiles?} {true false} false 377 ;# {RenderMeshes} {} {Render meshes and sculpties on map tiles?} {true false} false
378 ;; Attempt to render meshes and sculpties on the map 378 ;; Attempt to render meshes and sculpties on the map.
379 ; RenderMeshes = false; 379 ; RenderMeshes = false
380 380
381 381
382[Permissions] 382[Permissions]
@@ -585,7 +585,7 @@
585 ;; web server 585 ;; web server
586 ; user_agent = "OpenSim LSL (Mozilla Compatible)" 586 ; user_agent = "OpenSim LSL (Mozilla Compatible)"
587 587
588 ;; The follow 3 variables are for HTTP Basic Authentication for the Robust services. 588 ;; The following 3 variables are for HTTP Basic Authentication for the Robust services.
589 ;; Use this if your central services in port 8003 need to be accessible on the Internet 589 ;; Use this if your central services in port 8003 need to be accessible on the Internet
590 ;; but you want to protect them from unauthorized access. The username and password 590 ;; but you want to protect them from unauthorized access. The username and password
591 ;; here need to match the ones in the Robust service configuration. 591 ;; here need to match the ones in the Robust service configuration.
@@ -650,7 +650,6 @@
650 650
651 651
652[SimulatorFeatures] 652[SimulatorFeatures]
653
654 ;# {SearchServerURI} {} {URL of the search server} {} 653 ;# {SearchServerURI} {} {URL of the search server} {}
655 ;; Optional. If given this serves the same purpose as the grid wide 654 ;; Optional. If given this serves the same purpose as the grid wide
656 ;; [LoginServices] SearchURL setting and will override that where 655 ;; [LoginServices] SearchURL setting and will override that where
@@ -707,7 +706,7 @@
707 ;; For standalones, this is the storage dll. 706 ;; For standalones, this is the storage dll.
708 ; StorageProvider = OpenSim.Data.MySQL.dll 707 ; StorageProvider = OpenSim.Data.MySQL.dll
709 708
710 ;# {MuteListModule} {OfflineMessageModule:OfflineMessageModule} {} {} MuteListModule 709 ;# {MuteListModule} {OfflineMessageModule:OfflineMessageModule} {} {} None
711 ;; Mute list handler (not yet implemented). MUST BE SET to allow offline 710 ;; Mute list handler (not yet implemented). MUST BE SET to allow offline
712 ;; messages to work 711 ;; messages to work
713 ; MuteListModule = MuteListModule 712 ; MuteListModule = MuteListModule
@@ -1163,7 +1162,7 @@
1163[MediaOnAPrim] 1162[MediaOnAPrim]
1164 ;# {Enabled} {} {Enable Media-on-a-Prim (MOAP)} {true false} true 1163 ;# {Enabled} {} {Enable Media-on-a-Prim (MOAP)} {true false} true
1165 ;; Enable media on a prim facilities 1164 ;; Enable media on a prim facilities
1166 ; Enabled = true; 1165 ; Enabled = true
1167 1166
1168 1167
1169[NPC] 1168[NPC]