From 0a9c84feec3390a7bfde0850a23b982758f0da3b Mon Sep 17 00:00:00 2001
From: chylex <contact@chylex.com>
Date: Wed, 2 Feb 2022 19:30:21 +0100
Subject: [PATCH] Fix potentially not releasing a file lock if an exception is
 thrown while setting up a download

---
 windows/TweetDuck/Browser/Base/CefBrowserComponent.cs | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/windows/TweetDuck/Browser/Base/CefBrowserComponent.cs b/windows/TweetDuck/Browser/Base/CefBrowserComponent.cs
index fd25638f..cd1d2592 100644
--- a/windows/TweetDuck/Browser/Base/CefBrowserComponent.cs
+++ b/windows/TweetDuck/Browser/Base/CefBrowserComponent.cs
@@ -73,19 +73,20 @@ private void OnFrameLoadEnd(object sender, FrameLoadEndEventArgs e) {
 
 		public override void DownloadFile(string url, string path, Action onSuccess, Action<Exception> onError) {
 			Cef.UIThreadTaskFactory.StartNew(() => {
+				var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read);
+
 				try {
 					using IFrame frame = browser.GetMainFrame();
-					var request = frame.CreateRequest(false);
 
+					var request = frame.CreateRequest(false);
 					request.Method = "GET";
 					request.Url = url;
 					request.Flags = UrlRequestFlags.AllowStoredCredentials;
 					request.SetReferrer(Url, ReferrerPolicy.Default);
 
-					var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read);
-					var client = new CefDownloadRequestClient(fileStream, onSuccess, onError);
-					frame.CreateUrlRequest(request, client);
+					frame.CreateUrlRequest(request, new CefDownloadRequestClient(fileStream, onSuccess, onError));
 				} catch (Exception e) {
+					fileStream.Dispose();
 					onError?.Invoke(e);
 				}
 			});