diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 70a225e7c1..34b81d809a 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -103,14 +103,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver List serialisedSceneObjects = new List(); List serialisedParcels = new List(); string filePath = "NONE"; + + TarArchiveReader archive = new TarArchiveReader(m_loadStream); + byte[] data; + TarArchiveReader.TarEntryType entryType; try { - TarArchiveReader archive = new TarArchiveReader(m_loadStream); - - byte[] data; - TarArchiveReader.TarEntryType entryType; - while ((data = archive.ReadEntry(out filePath, out entryType)) != null) { //m_log.DebugFormat( @@ -152,8 +151,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver } //m_log.Debug("[ARCHIVER]: Reached end of archive"); - - archive.Close(); } catch (Exception e) { @@ -163,6 +160,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver m_scene.EventManager.TriggerOarFileLoaded(m_requestId, m_errorMessage); return; } + finally + { + archive.Close(); + } m_log.InfoFormat("[ARCHIVER]: Restored {0} assets", successfulAssetRestores); diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs index f039be8238..75c4557d97 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs @@ -79,6 +79,22 @@ namespace OpenSim.Region.CoreModules.World.Archiver protected internal void ReceivedAllAssets( ICollection assetsFoundUuids, ICollection assetsNotFoundUuids) + { + try + { + Save(assetsFoundUuids, assetsNotFoundUuids); + } + finally + { + m_archiveWriter.Close(); + } + + m_log.InfoFormat("[ARCHIVER]: Finished writing out OAR for {0}", m_scene.RegionInfo.RegionName); + + m_scene.EventManager.TriggerOarFileSaved(m_requestId, String.Empty); + } + + protected internal void Save(ICollection assetsFoundUuids, ICollection assetsNotFoundUuids) { foreach (UUID uuid in assetsNotFoundUuids) { @@ -143,12 +159,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver } m_log.InfoFormat("[ARCHIVER]: Added scene objects to archive."); - - m_archiveWriter.Close(); - - m_log.InfoFormat("[ARCHIVER]: Finished writing out OAR for {0}", m_scene.RegionInfo.RegionName); - - m_scene.EventManager.TriggerOarFileSaved(m_requestId, String.Empty); } /// diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs index 9e4fbbe2f8..f08d8eced5 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs @@ -56,6 +56,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver /// /// Constructor /// + /// + /// The path to which to save data. + /// The id associated with this request + /// + /// If there was a problem opening a stream for the file specified by the savePath + /// public ArchiveWriteRequestPreparation(Scene scene, string savePath, Guid requestId) { m_scene = scene;