From eb2454f4e014ffa36581a2db47cb74e7481546d4 Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Sun, 20 Jul 2014 10:07:56 +0200 Subject: [PATCH] Changes to prevent premature timeouts when running with Mono --- Duplicati/Library/Backend/S3/S3Wrapper.cs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Duplicati/Library/Backend/S3/S3Wrapper.cs b/Duplicati/Library/Backend/S3/S3Wrapper.cs index 796a0b100..0e2136e4b 100644 --- a/Duplicati/Library/Backend/S3/S3Wrapper.cs +++ b/Duplicati/Library/Backend/S3/S3Wrapper.cs @@ -71,12 +71,17 @@ namespace Duplicati.Library.Backend GetObjectRequest objectGetRequest = new GetObjectRequest(); objectGetRequest.BucketName = bucketName; objectGetRequest.Key = keyName; - objectGetRequest.Timeout = System.Threading.Timeout.Infinite; - objectGetRequest.ReadWriteTimeout = (int)TimeSpan.FromMinutes(1).TotalMilliseconds; + objectGetRequest.Timeout = (int)TimeSpan.FromMinutes(5).TotalMilliseconds; + objectGetRequest.ReadWriteTimeout = System.Threading.Timeout.Infinite; - using (GetObjectResponse objectGetResponse = m_client.GetObject(objectGetRequest)) - using (System.IO.Stream s = objectGetResponse.ResponseStream) + using(GetObjectResponse objectGetResponse = m_client.GetObject(objectGetRequest)) + using(System.IO.Stream s = objectGetResponse.ResponseStream) + { + try { s.ReadTimeout = (int)TimeSpan.FromMinutes(1).TotalMilliseconds; } + catch { } + Utility.Utility.CopyStream(s, target); + } } public void GetFileObject(string bucketName, string keyName, string localfile) @@ -99,8 +104,12 @@ namespace Duplicati.Library.Backend objectAddRequest.InputStream = source; objectAddRequest.StorageClass = m_useRRS ? S3StorageClass.ReducedRedundancy : S3StorageClass.Standard; objectAddRequest.GenerateMD5Digest = false; //We would like this, but cannot read the stream twice :( - objectAddRequest.Timeout = System.Threading.Timeout.Infinite; - objectAddRequest.ReadWriteTimeout = (int)TimeSpan.FromMinutes(1).TotalMilliseconds; + + if (!Library.Utility.Utility.IsMono) + { + objectAddRequest.Timeout = System.Threading.Timeout.Infinite; + objectAddRequest.ReadWriteTimeout = (int)TimeSpan.FromMinutes(1).TotalMilliseconds; + } using (PutObjectResponse objectAddResponse = m_client.PutObject(objectAddRequest)) { }