diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index b5272ad151..c34a0ecf90 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -157,7 +157,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
string serialization = UserInventoryItemSerializer.Serialize(inventoryItem, options, userAccountService);
m_archiveWriter.WriteFile(filename, serialization);
- if (SaveAssets)
+ AssetType itemAssetType = (AssetType)inventoryItem.AssetType;
+
+ // Don't chase down link asset items as they actually point to their target item IDs rather than an asset
+ if (SaveAssets && itemAssetType != AssetType.Link && itemAssetType != AssetType.LinkFolder)
m_assetGatherer.GatherAssetUuids(inventoryItem.AssetID, (AssetType)inventoryItem.AssetType, m_assetUuids);
}
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index 872816c450..47af0dd219 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -570,7 +570,13 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
private static void ProcessShape(SceneObjectPart obj, XmlTextReader reader)
{
- obj.Shape = ReadShape(reader, "Shape");
+ bool errors = false;
+ obj.Shape = ReadShape(reader, "Shape", out errors);
+
+ if (errors)
+ m_log.DebugFormat(
+ "[SceneObjectSerializer]: Parsing PrimitiveBaseShape for object part {0} {1} encountered errors. Please see earlier log entries.",
+ obj.Name, obj.UUID);
}
private static void ProcessScale(SceneObjectPart obj, XmlTextReader reader)
@@ -1470,7 +1476,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
}
catch (Exception e)
{
- m_log.DebugFormat("[SceneObjectSerializer]: exception while parsing {0}: {1}", nodeName, e);
+ m_log.DebugFormat(
+ "[SceneObjectSerializer]: exception while parsing {0} in object {1} {2}: {3}{4}",
+ obj.Name, obj.UUID, nodeName, e.Message, e.StackTrace);
if (reader.NodeType == XmlNodeType.EndElement)
reader.Read();
}
@@ -1528,8 +1536,17 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
return tinv;
}
- static PrimitiveBaseShape ReadShape(XmlTextReader reader, string name)
+ ///
+ /// Read a shape from xml input
+ ///
+ ///
+ /// The name of the xml element containing the shape
+ /// true if any errors were encountered during parsing, false otherwise
+ /// The shape parsed
+ static PrimitiveBaseShape ReadShape(XmlTextReader reader, string name, out bool errors)
{
+ errors = false;
+
PrimitiveBaseShape shape = new PrimitiveBaseShape();
if (reader.IsEmptyElement)
@@ -1554,7 +1571,11 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
}
catch (Exception e)
{
- m_log.DebugFormat("[SceneObjectSerializer]: exception while parsing Shape {0}: {1}", nodeName, e);
+ errors = true;
+ m_log.DebugFormat(
+ "[SceneObjectSerializer]: exception while parsing Shape property {0}: {1}{2}",
+ nodeName, e.Message, e.StackTrace);
+
if (reader.NodeType == XmlNodeType.EndElement)
reader.Read();
}