From 6b86288214021122cb56a983fabce7468cae82a6 Mon Sep 17 00:00:00 2001 From: Manuel de la Pena Date: Mon, 20 Mar 2017 17:48:21 +0100 Subject: [PATCH] [Foundation] Fix NSUrlSessionHandler thread issues. Do not deal with the configuration in the instance constructor. We do not need to do it for every instance AND it is racy. --- src/Foundation/NSUrlSessionHandler.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Foundation/NSUrlSessionHandler.cs b/src/Foundation/NSUrlSessionHandler.cs index 3d348d71decf..1e6f508b8c1d 100644 --- a/src/Foundation/NSUrlSessionHandler.cs +++ b/src/Foundation/NSUrlSessionHandler.cs @@ -55,6 +55,7 @@ namespace Foundation { #endif public partial class NSUrlSessionHandler : HttpMessageHandler { + static readonly NSUrlSessionConfiguration configuration; readonly Dictionary headerSeparators = new Dictionary { ["User-Agent"] = " ", ["Server"] = " " @@ -64,10 +65,9 @@ public partial class NSUrlSessionHandler : HttpMessageHandler readonly Dictionary inflightRequests; readonly object inflightRequestsLock = new object (); - public NSUrlSessionHandler () + static NSUrlSessionHandler () { - AllowAutoRedirect = true; - var configuration = NSUrlSessionConfiguration.DefaultSessionConfiguration; + configuration = NSUrlSessionConfiguration.DefaultSessionConfiguration; // we cannot do a bitmask but we can set the minimum based on ServicePointManager.SecurityProtocol minimum var sp = ServicePointManager.SecurityProtocol; @@ -79,8 +79,13 @@ public NSUrlSessionHandler () configuration.TLSMinimumSupportedProtocol = SslProtocol.Tls_1_1; else if ((sp & SecurityProtocolType.Tls12) != 0) configuration.TLSMinimumSupportedProtocol = SslProtocol.Tls_1_2; + } + + public NSUrlSessionHandler () + { + AllowAutoRedirect = true; - session = NSUrlSession.FromConfiguration (NSUrlSessionConfiguration.DefaultSessionConfiguration, new NSUrlSessionHandlerDelegate (this), null); + session = NSUrlSession.FromConfiguration (configuration, new NSUrlSessionHandlerDelegate (this), null); inflightRequests = new Dictionary (); }