Prechádzať zdrojové kódy

lock SendData to fix random connection failures (#1623)

mus65 7 mesiacov pred
rodič
commit
c318e39d2c

+ 14 - 10
src/Renci.SshNet/Channels/Channel.cs

@@ -17,6 +17,7 @@ namespace Renci.SshNet.Channels
     {
         private readonly Lock _serverWindowSizeLock = new Lock();
         private readonly Lock _messagingLock = new Lock();
+        private readonly Lock _sendDataLock = new Lock();
         private readonly uint _initialWindowSize;
         private readonly ISession _session;
         private readonly ILogger _logger;
@@ -340,19 +341,22 @@ namespace Renci.SshNet.Channels
                 return;
             }
 
-            var totalBytesToSend = size;
-            while (totalBytesToSend > 0)
+            lock (_sendDataLock)
             {
-                var sizeOfCurrentMessage = GetDataLengthThatCanBeSentInMessage(totalBytesToSend);
+                var totalBytesToSend = size;
+                while (totalBytesToSend > 0)
+                {
+                    var sizeOfCurrentMessage = GetDataLengthThatCanBeSentInMessage(totalBytesToSend);
 
-                var channelDataMessage = new ChannelDataMessage(RemoteChannelNumber,
-                                                                data,
-                                                                offset,
-                                                                sizeOfCurrentMessage);
-                _session.SendMessage(channelDataMessage);
+                    var channelDataMessage = new ChannelDataMessage(RemoteChannelNumber,
+                                                                    data,
+                                                                    offset,
+                                                                    sizeOfCurrentMessage);
+                    _session.SendMessage(channelDataMessage);
 
-                totalBytesToSend -= sizeOfCurrentMessage;
-                offset += sizeOfCurrentMessage;
+                    totalBytesToSend -= sizeOfCurrentMessage;
+                    offset += sizeOfCurrentMessage;
+                }
             }
         }
 

+ 0 - 5
test/Renci.SshNet.IntegrationTests/OldIntegrationTests/SftpClientTest.Upload.cs

@@ -77,11 +77,6 @@ namespace Renci.SshNet.IntegrationTests.OldIntegrationTests
         [TestCategory("Sftp")]
         public void Test_Sftp_Multiple_Async_Upload_And_Download_10Files_5MB_Each()
         {
-            if (Environment.GetEnvironmentVariable("CI") == "true")
-            {
-                Assert.Inconclusive("Skipping because of failures in CI, see #1253");
-            }
-
             var maxFiles = 10;
             var maxSize = 5;