You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by fl...@apache.org on 2018/06/23 09:56:24 UTC
tinkerpop git commit: Add check for connection state before returning
it TINKERPOP-1978
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1978 [created] 4bacf67af
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/4bacf67a
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4bacf67a
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4bacf67a
Branch: refs/heads/TINKERPOP-1978
Commit: 4bacf67af79025520171cbd6ea75c9237981df88
Parents: 32aebb8
Author: Florian Hockmann <fh...@florian-hockmann.de>
Authored: Sat Jun 23 11:56:01 2018 +0200
Committer: Florian Hockmann <fh...@florian-hockmann.de>
Committed: Sat Jun 23 11:56:01 2018 +0200
----------------------------------------------------------------------
.../src/Gremlin.Net/Driver/ConnectionPool.cs | 26 ++++++++++++++------
1 file changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4bacf67a/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..69985f5 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,17 +44,28 @@ namespace Gremlin.Net.Driver
public async Task<IConnection> GetAvailableConnectionAsync()
{
+ var connection = GetConnectionFromPoolIfAvailable() ??
+ await CreateNewConnectionAsync().ConfigureAwait(false);
+
+ return new ProxyConnection(connection, AddConnectionIfOpen);
+ }
+
+ private Connection GetConnectionFromPoolIfAvailable()
+ {
Connection connection = null;
- lock (_connectionsLock)
+ while (true)
{
- if (!_connections.IsEmpty)
+ lock (_connectionsLock)
+ {
+ if (_connections.IsEmpty) break;
_connections.TryTake(out connection);
- }
-
- if (connection == null)
- connection = await CreateNewConnectionAsync().ConfigureAwait(false);
+ }
- return new ProxyConnection(connection, AddConnectionIfOpen);
+ if (connection.IsOpen) break;
+ connection.Dispose();
+ connection = null;
+ }
+ return connection;
}
private async Task<Connection> CreateNewConnectionAsync()