From be21e09db1dba8add010d64833e46abe1110072e Mon Sep 17 00:00:00 2001 From: Kenneth Hsu Date: Fri, 22 Mar 2019 19:11:54 -0700 Subject: [PATCH] Cancel the FlushBackend task if upload exception occurs. This should avoid the problem of something awaiting a FlushBackend.LastWriteSizeAync task that may never complete. --- Duplicati/Library/Main/Operation/Backup/BackendUploader.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Duplicati/Library/Main/Operation/Backup/BackendUploader.cs b/Duplicati/Library/Main/Operation/Backup/BackendUploader.cs index cf6a4c2b3..a7ed6418b 100644 --- a/Duplicati/Library/Main/Operation/Backup/BackendUploader.cs +++ b/Duplicati/Library/Main/Operation/Backup/BackendUploader.cs @@ -39,6 +39,12 @@ namespace Duplicati.Library.Main.Operation.Backup { public Task LastWriteSizeAsync { get { return m_tcs.Task; } } private readonly TaskCompletionSource m_tcs = new TaskCompletionSource(); + + public void TrySetCanceled() + { + m_tcs.TrySetCanceled(); + } + public void SetFlushed(long size) { m_tcs.TrySetResult(size); @@ -171,6 +177,7 @@ namespace Duplicati.Library.Main.Operation.Backup Task finishedTask = await Task.WhenAny(workers.Select(w => w.Task)).ConfigureAwait(false); if (finishedTask.IsFaulted) { + flush.TrySetCanceled(); ExceptionDispatchInfo.Capture(finishedTask.Exception).Throw(); }