Skip to content

Commit d852232

Browse files
committed
Fix race condition in BinaryConnectionTests.
1 parent 368e0e0 commit d852232

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

tests/MongoDB.Driver.Core.Tests/Core/Connections/BinaryConnection_CommandEventTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class BinaryConnection_CommandEventTests : IDisposable
4242
private DnsEndPoint _endPoint;
4343
private EventCapturer _capturedEvents;
4444
private MessageEncoderSettings _messageEncoderSettings = new MessageEncoderSettings();
45-
private Stream _stream;
45+
private BlockingMemoryStream _stream;
4646
private Mock<IStreamFactory> _mockStreamFactory;
4747
private BinaryConnection _subject;
4848
private IDisposable _operationIdDisposer;

tests/MongoDB.Driver.Core.Tests/Core/Helpers/BlockingMemoryStream.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ public override long Length
5050
}
5151
}
5252

53+
public object Lock
54+
{
55+
get { return _lock; }
56+
}
57+
5358
public override long Position
5459
{
5560
get

tests/MongoDB.Driver.Core.Tests/Core/Helpers/MessageHelper.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,16 +272,19 @@ public static List<BsonDocument> TranslateMessagesToBsonDocuments(byte[] bytes)
272272
return TranslateMessagesToBsonDocuments(TranslateBytesToRequests(bytes));
273273
}
274274

275-
public static void WriteResponsesToStream(Stream stream, IEnumerable<ResponseMessage> responses)
275+
public static void WriteResponsesToStream(BlockingMemoryStream stream, IEnumerable<ResponseMessage> responses)
276276
{
277-
var startPosition = stream.Position;
278-
foreach (var response in responses)
277+
lock (stream.Lock)
279278
{
280-
var encoderFactory = new BinaryMessageEncoderFactory(stream, null);
281-
var encoder = response.GetEncoder(encoderFactory);
282-
encoder.WriteMessage(response);
279+
var startPosition = stream.Position;
280+
foreach (var response in responses)
281+
{
282+
var encoderFactory = new BinaryMessageEncoderFactory(stream, null);
283+
var encoder = response.GetEncoder(encoderFactory);
284+
encoder.WriteMessage(response);
285+
}
286+
stream.Position = startPosition;
283287
}
284-
stream.Position = startPosition;
285288
}
286289

287290
private static List<RequestMessage> TranslateBytesToRequests(byte[] bytes)

0 commit comments

Comments
 (0)