From cfd2b7b7aaa77ad9e13977b5fdb14d368b3ae33e Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Mon, 20 Jun 2022 22:36:14 -0600 Subject: [PATCH] Fixed rare bug that would cause a hang if an error occured in the download loop --- Source/AaxDecrypter/AaxDecrypter.csproj | 2 +- Source/AaxDecrypter/NetworkFileStream.cs | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Source/AaxDecrypter/AaxDecrypter.csproj b/Source/AaxDecrypter/AaxDecrypter.csproj index 9ef266c7..90fdc76d 100644 --- a/Source/AaxDecrypter/AaxDecrypter.csproj +++ b/Source/AaxDecrypter/AaxDecrypter.csproj @@ -5,7 +5,7 @@ - + diff --git a/Source/AaxDecrypter/NetworkFileStream.cs b/Source/AaxDecrypter/NetworkFileStream.cs index e1159d67..183fff7e 100644 --- a/Source/AaxDecrypter/NetworkFileStream.cs +++ b/Source/AaxDecrypter/NetworkFileStream.cs @@ -145,7 +145,14 @@ namespace AaxDecrypter private void Update() { RequestHeaders = HttpRequest.Headers; - Updated?.Invoke(this, EventArgs.Empty); + try + { + Updated?.Invoke(this, EventArgs.Empty); + } + catch (Exception ex) + { + Serilog.Log.Error(ex, "An error was encountered while saving the download progress to JSON"); + } } /// @@ -245,9 +252,6 @@ namespace AaxDecrypter WritePosition = downloadPosition; Update(); - downloadedPiece.Set(); - downloadEnded.Set(); - if (!IsCancelled && WritePosition < ContentLength) throw new WebException($"Downloaded size (0x{WritePosition:X10}) is less than {nameof(ContentLength)} (0x{ContentLength:X10})."); @@ -259,6 +263,11 @@ namespace AaxDecrypter Serilog.Log.Error(ex, "An error was encountered while downloading {Uri}", Uri); IsCancelled = true; } + finally + { + downloadedPiece.Set(); + downloadEnded.Set(); + } } #endregion @@ -401,10 +410,11 @@ namespace AaxDecrypter { if (!hasBegunDownloading) BeginDownloading(); - + var toRead = Math.Min(count, Length - Position); WaitToPosition(Position + toRead); - return _readFile.Read(buffer, offset, count); + + return IsCancelled ? 0 : _readFile.Read(buffer, offset, count); } public override long Seek(long offset, SeekOrigin origin)