Merge pull request #11 from HavretGC/AMQNET-594_Race_condition_during_session_creation
AMQNET-594: Race condition during session creation
diff --git a/src/NMS.AMQP/NmsConnection.cs b/src/NMS.AMQP/NmsConnection.cs
index 0383c14..307ebed 100644
--- a/src/NMS.AMQP/NmsConnection.cs
+++ b/src/NMS.AMQP/NmsConnection.cs
@@ -446,23 +446,32 @@
private void CreateNmsConnection()
{
- if (connected.CompareAndSet(false, true))
+ if (connected || closed)
{
- try
- {
- provider.Connect(ConnectionInfo).ConfigureAwait(false).GetAwaiter().GetResult();
- }
- catch (Exception e)
+ return;
+ }
+
+ lock (syncRoot)
+ {
+ if (!closed && connected.CompareAndSet(false, true))
{
try
{
- provider.Close();
+ provider.Connect(ConnectionInfo).ConfigureAwait(false).GetAwaiter().GetResult();
+
}
- catch
+ catch (Exception e)
{
- }
+ try
+ {
+ provider.Close();
+ }
+ catch
+ {
+ }
- throw NMSExceptionSupport.Create(e);
+ throw NMSExceptionSupport.Create(e);
+ }
}
}
}