You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by mi...@apache.org on 2019/08/01 15:43:40 UTC

[activemq-nms-amqp] branch master updated: AMQNET-594: Race condition during session creation

This is an automated email from the ASF dual-hosted git repository.

michaelpearce pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-nms-amqp.git


The following commit(s) were added to refs/heads/master by this push:
     new 640ec72  AMQNET-594: Race condition during session creation
     new 8693c1b  Merge pull request #11 from HavretGC/AMQNET-594_Race_condition_during_session_creation
640ec72 is described below

commit 640ec72d4bfd9dd585dbec150ad608fab7b7549d
Author: Havret <h4...@gmail.com>
AuthorDate: Thu Aug 1 13:05:41 2019 +0200

    AMQNET-594: Race condition during session creation
---
 src/NMS.AMQP/NmsConnection.cs | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

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 @@ namespace Apache.NMS.AMQP
 
         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);
+                    }
                 }
             }
         }