diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/CacheController.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/CacheController.cs index 3d73fc8..106a83b 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/CacheController.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/CacheController.cs @@ -48,6 +48,6 @@ public class CacheController : ControllerBase _fileStatisticsService.LogRequest(requestSize); - return _requestFileStreamResultFactory.Create(requestId, new BlockFileDataStream(substreams.ToArray())); + return _requestFileStreamResultFactory.Create(requestId, new BlockFileDataStream(substreams)); } } diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/BlockFileDataStream.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/BlockFileDataStream.cs index 3785698..cefb47e 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/BlockFileDataStream.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/BlockFileDataStream.cs @@ -2,10 +2,10 @@ public sealed class BlockFileDataStream : Stream { - private readonly BlockFileDataSubstream[] _substreams; + private readonly List _substreams; private int _currentStreamIndex = 0; - public BlockFileDataStream(BlockFileDataSubstream[] substreams) + public BlockFileDataStream(List substreams) { _substreams = substreams; } @@ -21,7 +21,7 @@ public sealed class BlockFileDataStream : Stream int totalRead = 0; int currentOffset = 0; int remainingCount = count; - while (totalRead < count && _currentStreamIndex < _substreams.Length) + while (totalRead < count && _currentStreamIndex < _substreams.Count) { var lastReadBytes = _substreams[_currentStreamIndex].Read(buffer, currentOffset, remainingCount); if (lastReadBytes < remainingCount) diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/BlockFileDataSubstream.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/BlockFileDataSubstream.cs index 99e169e..418f603 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/BlockFileDataSubstream.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/BlockFileDataSubstream.cs @@ -17,7 +17,7 @@ public sealed class BlockFileDataSubstream : IDisposable public BlockFileDataSubstream(FileStream dataStream) { _headerStream = new MemoryStream(); - var headerStreamWriter = new BinaryWriter(_headerStream); + using var headerStreamWriter = new BinaryWriter(_headerStream); headerStreamWriter.Write(Encoding.ASCII.GetBytes("#" + new FileInfo(dataStream.Name).Name + ":" + dataStream.Length.ToString(CultureInfo.InvariantCulture) + "#")); headerStreamWriter.Flush(); _headerStream.Position = 0; diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/RequestFileStreamResult.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/RequestFileStreamResult.cs index 207524d..31e7b0a 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/RequestFileStreamResult.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Utils/RequestFileStreamResult.cs @@ -34,6 +34,7 @@ public class RequestFileStreamResult : FileStreamResult _requestQueueService.FinishRequest(_requestId); _mareMetrics.DecGauge(MetricsAPI.GaugeCurrentDownloads); + FileStream?.Dispose(); } } @@ -50,8 +51,8 @@ public class RequestFileStreamResult : FileStreamResult finally { _requestQueueService.FinishRequest(_requestId); - _mareMetrics.DecGauge(MetricsAPI.GaugeCurrentDownloads); + FileStream?.Dispose(); } } } \ No newline at end of file