lock SendData to fix random connection failures (#1623)

This commit is contained in:
mus65
2025-03-29 17:16:42 +01:00
committed by GitHub
parent 153b47d976
commit c318e39d2c
2 changed files with 14 additions and 15 deletions
+14 -10
View File
@@ -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;
}
}
}
@@ -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;