From 62771560448edbc2112d427acd4b37780dfe2154 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Thu, 14 May 2009 20:37:54 +0000 Subject: * When saving an oar, save assets when immediately received rather than storing them all up in memory * Hopefully this will remove out of memory problems when saving large oars on machines without much memory * It may also speed up saving of large oars --- .../Archiver/InventoryArchiveWriteRequest.cs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver') diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index b5c0d86..fec2425 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs @@ -56,7 +56,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver private InventoryArchiverModule m_module; private CachedUserInfo m_userInfo; private string m_invPath; - protected TarArchiveWriter m_archive; + protected TarArchiveWriter m_archiveWriter; protected UuidGatherer m_assetGatherer; /// @@ -100,17 +100,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver m_assetGatherer = new UuidGatherer(m_module.CommsManager.AssetCache); } - protected void ReceivedAllAssets(IDictionary assetsFound, ICollection assetsNotFoundUuids) + protected void ReceivedAllAssets(ICollection assetsFoundUuids, ICollection assetsNotFoundUuids) { - AssetsArchiver assetsArchiver = new AssetsArchiver(assetsFound); - assetsArchiver.Archive(m_archive); - Exception reportedException = null; bool succeeded = true; try { - m_archive.Close(); + m_archiveWriter.Close(); } catch (IOException e) { @@ -133,7 +130,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver saveItem.CreatorId = OspResolver.MakeOspa(saveItem.CreatorIdAsUuid, m_module.CommsManager); string serialization = UserInventoryItemSerializer.Serialize(saveItem); - m_archive.WriteFile(filename, serialization); + m_archiveWriter.WriteFile(filename, serialization); m_assetGatherer.GatherAssetUuids(saveItem.AssetID, (AssetType)saveItem.AssetType, m_assetUuids); } @@ -156,7 +153,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver inventoryFolder.ID); // We need to make sure that we record empty folders - m_archive.WriteDir(path); + m_archiveWriter.WriteDir(path); } List childFolders = inventoryFolder.RequestListOfFolderImpls(); @@ -265,7 +262,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver inventoryItem = m_userInfo.RootFolder.FindItemByPath(m_invPath); } - m_archive = new TarArchiveWriter(m_saveStream); + m_archiveWriter = new TarArchiveWriter(m_saveStream); if (null == inventoryFolder) { @@ -298,7 +295,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver } SaveUsers(); - new AssetsRequest(m_assetUuids.Keys, m_module.CommsManager.AssetCache, ReceivedAllAssets).Execute(); + new AssetsRequest( + new AssetsArchiver(m_archiveWriter), m_assetUuids.Keys, + m_module.CommsManager.AssetCache, ReceivedAllAssets).Execute(); } /// @@ -316,7 +315,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver if (creator != null) { - m_archive.WriteFile( + m_archiveWriter.WriteFile( ArchiveConstants.USERS_PATH + creator.UserProfile.Name + ".xml", UserProfileSerializer.Serialize(creator.UserProfile)); } -- cgit v1.1