You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2018/06/29 20:05:41 UTC

[03/20] tinkerpop git commit: Add check for connection state before returning it TINKERPOP-1978

Add check for connection state before returning it TINKERPOP-1978


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c4a25472
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c4a25472
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c4a25472

Branch: refs/heads/TINKERPOP-1987
Commit: c4a254726167d798617331ff3dd00ece97377b2d
Parents: 32aebb8
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sat Jun 23 12:24:15 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Sat Jun 23 12:24:15 2018 +0200

----------------------------------------------------------------------
 .../src/Gremlin.Net/Driver/ConnectionPool.cs    | 26 +++++++++++++-------
 1 file changed, 17 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c4a25472/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPool.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPool.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPool.cs
index 9501686..d9e53f4 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPool.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPool.cs
@@ -23,7 +23,6 @@
 
 using System;
 using System.Collections.Concurrent;
-using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
 using Gremlin.Net.Process;
@@ -45,19 +44,28 @@ namespace Gremlin.Net.Driver
 
         public async Task<IConnection> GetAvailableConnectionAsync()
         {
-            Connection connection = null;
-            lock (_connectionsLock)
-            {
-                if (!_connections.IsEmpty)
-                    _connections.TryTake(out connection);
-            }
-
-            if (connection == null)
+            if (!TryGetConnectionFromPool(out var connection))
                 connection = await CreateNewConnectionAsync().ConfigureAwait(false);
 
             return new ProxyConnection(connection, AddConnectionIfOpen);
         }
 
+        private bool TryGetConnectionFromPool(out Connection connection)
+        {
+            while (true)
+            {
+                connection = null;
+                lock (_connectionsLock)
+                {
+                    if (_connections.IsEmpty) return false;
+                    _connections.TryTake(out connection);
+                }
+
+                if (connection.IsOpen) return true;
+                connection.Dispose();
+            }
+        }
+
         private async Task<Connection> CreateNewConnectionAsync()
         {
             NrConnections++;