Skip to content

Commit c318e39

Browse files
authored
lock SendData to fix random connection failures (#1623)
1 parent 153b47d commit c318e39

File tree

2 files changed

+14
-15
lines changed

2 files changed

+14
-15
lines changed

src/Renci.SshNet/Channels/Channel.cs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ internal abstract class Channel : IChannel
1717
{
1818
private readonly Lock _serverWindowSizeLock = new Lock();
1919
private readonly Lock _messagingLock = new Lock();
20+
private readonly Lock _sendDataLock = new Lock();
2021
private readonly uint _initialWindowSize;
2122
private readonly ISession _session;
2223
private readonly ILogger _logger;
@@ -340,19 +341,22 @@ public void SendData(byte[] data, int offset, int size)
340341
return;
341342
}
342343

343-
var totalBytesToSend = size;
344-
while (totalBytesToSend > 0)
344+
lock (_sendDataLock)
345345
{
346-
var sizeOfCurrentMessage = GetDataLengthThatCanBeSentInMessage(totalBytesToSend);
346+
var totalBytesToSend = size;
347+
while (totalBytesToSend > 0)
348+
{
349+
var sizeOfCurrentMessage = GetDataLengthThatCanBeSentInMessage(totalBytesToSend);
347350

348-
var channelDataMessage = new ChannelDataMessage(RemoteChannelNumber,
349-
data,
350-
offset,
351-
sizeOfCurrentMessage);
352-
_session.SendMessage(channelDataMessage);
351+
var channelDataMessage = new ChannelDataMessage(RemoteChannelNumber,
352+
data,
353+
offset,
354+
sizeOfCurrentMessage);
355+
_session.SendMessage(channelDataMessage);
353356

354-
totalBytesToSend -= sizeOfCurrentMessage;
355-
offset += sizeOfCurrentMessage;
357+
totalBytesToSend -= sizeOfCurrentMessage;
358+
offset += sizeOfCurrentMessage;
359+
}
356360
}
357361
}
358362

test/Renci.SshNet.IntegrationTests/OldIntegrationTests/SftpClientTest.Upload.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,6 @@ public void Test_Sftp_Upload_Forbidden()
7777
[TestCategory("Sftp")]
7878
public void Test_Sftp_Multiple_Async_Upload_And_Download_10Files_5MB_Each()
7979
{
80-
if (Environment.GetEnvironmentVariable("CI") == "true")
81-
{
82-
Assert.Inconclusive("Skipping because of failures in CI, see #1253");
83-
}
84-
8580
var maxFiles = 10;
8681
var maxSize = 5;
8782

0 commit comments

Comments
 (0)