Skip to content

Commit 45d5fdb

Browse files
committed
CSHARP-1876: Fix race conditions in ReceiveMessage_should_handle_out_of_order_replies.
1 parent 207c735 commit 45d5fdb

File tree

2 files changed

+7
-9
lines changed

2 files changed

+7
-9
lines changed

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright 2013-2016 MongoDB Inc.
1+
/* Copyright 2013-2017 MongoDB Inc.
22
*
33
* Licensed under the Apache License, Version 2.0 (the "License");
44
* you may not use this file except in compliance with the License.
@@ -391,9 +391,7 @@ public void ReceiveMessage_should_handle_out_of_order_replies(
391391
}
392392
else
393393
{
394-
var receivedTask10IsRunning = 0;
395-
receivedTask10 = Task.Run(() => { Interlocked.Exchange(ref receivedTask10IsRunning, 1); return _subject.ReceiveMessage(10, encoderSelector, _messageEncoderSettings, CancellationToken.None); });
396-
SpinWait.SpinUntil(() => Interlocked.CompareExchange(ref receivedTask10IsRunning, 0, 0) == 1, TimeSpan.FromSeconds(5)).Should().BeTrue();
394+
receivedTask10 = Task.Run(() => _subject.ReceiveMessage(10, encoderSelector, _messageEncoderSettings, CancellationToken.None));
397395
}
398396

399397
Task<ResponseMessage> receivedTask11;
@@ -403,11 +401,11 @@ public void ReceiveMessage_should_handle_out_of_order_replies(
403401
}
404402
else
405403
{
406-
var receivedTask11IsRunning = 0;
407-
receivedTask11 = Task.Run(() => { Interlocked.Exchange(ref receivedTask11IsRunning, 1); return _subject.ReceiveMessage(11, encoderSelector, _messageEncoderSettings, CancellationToken.None); });
408-
SpinWait.SpinUntil(() => Interlocked.CompareExchange(ref receivedTask11IsRunning, 0, 0) == 1, TimeSpan.FromSeconds(5)).Should().BeTrue();
404+
receivedTask11 = Task.Run(() => _subject.ReceiveMessage(11, encoderSelector, _messageEncoderSettings, CancellationToken.None));
409405
}
410406

407+
SpinWait.SpinUntil(() => _capturedEvents.Count >= 2, TimeSpan.FromSeconds(5)).Should().BeTrue();
408+
411409
var messageToReceive10 = MessageHelper.BuildReply<BsonDocument>(new BsonDocument("_id", 10), BsonDocumentSerializer.Instance, responseTo: 10);
412410
var messageToReceive11 = MessageHelper.BuildReply<BsonDocument>(new BsonDocument("_id", 11), BsonDocumentSerializer.Instance, responseTo: 11);
413411
MessageHelper.WriteResponsesToStream(stream, new[] { messageToReceive11, messageToReceive10 }); // out of order

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright 2015-2016 MongoDB Inc.
1+
/* Copyright 2015-2017 MongoDB Inc.
22
*
33
* Licensed under the Apache License, Version 2.0 (the "License");
44
* you may not use this file except in compliance with the License.
@@ -31,7 +31,7 @@ public class BlockingMemoryStream : MemoryStream
3131

3232
public BlockingMemoryStream()
3333
{
34-
_spinWaitTimeout = TimeSpan.FromSeconds(1);
34+
_spinWaitTimeout = TimeSpan.FromSeconds(10);
3535
}
3636

3737
public BlockingMemoryStream(TimeSpan spinWaitTimeout)

0 commit comments

Comments
 (0)