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++;