mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Bug fixes for virtual memory/stream leaks
This commit is contained in:
parent
854bdbcaf3
commit
181a0f6b6a
@ -172,6 +172,7 @@ namespace Compression.BSA
|
||||
using var ms = new MemoryStream();
|
||||
using (var ds = new DeflaterOutputStream(ms))
|
||||
{
|
||||
ds.IsStreamOwner = false;
|
||||
src.CopyToLimit(ds, (int)chunk.FullSz);
|
||||
}
|
||||
|
||||
@ -204,6 +205,7 @@ namespace Compression.BSA
|
||||
bw.Write((ulong)pos);
|
||||
bw.BaseStream.Position = pos;
|
||||
_dataSlab.CopyToLimit(bw.BaseStream, (int)_dataSlab.Length);
|
||||
_dataSlab.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@ -230,6 +232,7 @@ namespace Compression.BSA
|
||||
{
|
||||
using (var ds = new DeflaterOutputStream(ms))
|
||||
{
|
||||
ds.IsStreamOwner = false;
|
||||
builder._dataSrc.CopyTo(ds);
|
||||
}
|
||||
|
||||
@ -268,6 +271,7 @@ namespace Compression.BSA
|
||||
wtr.BaseStream.Position = pos;
|
||||
_dataSrc.Position = 0;
|
||||
_dataSrc.CopyToLimit(wtr.BaseStream, (int)_dataSrc.Length);
|
||||
_dataSrc.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -298,6 +298,7 @@ namespace Compression.BSA
|
||||
var r = new MemoryStream();
|
||||
using (var w = new DeflaterOutputStream(r))
|
||||
{
|
||||
w.IsStreamOwner = false;
|
||||
_srcData.CopyTo(w);
|
||||
}
|
||||
_srcData = _bsa._slab.Allocate(r.Length);
|
||||
@ -341,11 +342,13 @@ namespace Compression.BSA
|
||||
wtr.Write((uint) _originalSize);
|
||||
_srcData.Position = 0;
|
||||
_srcData.CopyToLimit(wtr.BaseStream, (int)_srcData.Length);
|
||||
_srcData.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
_srcData.Position = 0;
|
||||
_srcData.CopyToLimit(wtr.BaseStream, (int)_srcData.Length);
|
||||
_srcData.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -66,6 +66,7 @@ namespace Compression.BSA
|
||||
{
|
||||
bw.BaseStream.Position = _state.DataOffset + state.Offset;
|
||||
data.CopyTo(bw.BaseStream);
|
||||
data.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@ namespace Wabbajack.Common
|
||||
public DiskSlabAllocator()
|
||||
{
|
||||
_name = Guid.NewGuid().ToString();
|
||||
_mmap = MemoryMappedFile.CreateNew(_name, (long)1 << 34);
|
||||
_mmap = MemoryMappedFile.CreateNew(null, (long)1 << 34);
|
||||
}
|
||||
|
||||
public Stream Allocate(long size)
|
||||
|
@ -239,17 +239,17 @@ namespace Wabbajack.Lib
|
||||
|
||||
using (var a = bsa.State.MakeBuilder())
|
||||
{
|
||||
await bsa.FileStates.PMap(Queue, state =>
|
||||
var streams = await bsa.FileStates.PMap(Queue, state =>
|
||||
{
|
||||
Status($"Adding {state.Path} to BSA");
|
||||
using (var fs = File.OpenRead(Path.Combine(sourceDir, state.Path)))
|
||||
{
|
||||
a.AddFile(state, fs);
|
||||
}
|
||||
var fs = File.OpenRead(Path.Combine(sourceDir, state.Path));
|
||||
a.AddFile(state, fs);
|
||||
return fs;
|
||||
});
|
||||
|
||||
Info($"Writing {bsa.To}");
|
||||
a.Build(Path.Combine(OutputFolder, bsa.To));
|
||||
streams.Do(s => s.Dispose());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user