diff --git a/src/MySqlConnector/MySqlClient/ConnectionPool.cs b/src/MySqlConnector/MySqlClient/ConnectionPool.cs index 7e5d42e8d..720d343de 100644 --- a/src/MySqlConnector/MySqlClient/ConnectionPool.cs +++ b/src/MySqlConnector/MySqlClient/ConnectionPool.cs @@ -33,11 +33,6 @@ public async Task GetSessionAsync(IOBehavior ioBehavior, Cancellat } else { - // session is valid, reset if supported - if (m_connectionSettings.ConnectionReset) - { - await session.ResetConnectionAsync(m_connectionSettings, ioBehavior, cancellationToken).ConfigureAwait(false); - } // pooled session is ready to be used; return it return session; } @@ -58,10 +53,26 @@ public void Return(MySqlSession session) { try { + var success = false; + if (session.PoolGeneration == m_generation) + { + try + { + // reset the connection upon returning it to the pool + if (m_connectionSettings.ConnectionReset) + session.ResetConnectionAsync(m_connectionSettings, IOBehavior.Synchronous, CancellationToken.None).GetAwaiter().GetResult(); + success = true; + } + catch (MySqlException) + { + } + } + + if (success) m_sessions.Enqueue(session); else - session.DisposeAsync(IOBehavior.Synchronous, CancellationToken.None).ConfigureAwait(false); + session.DisposeAsync(IOBehavior.Synchronous, CancellationToken.None).GetAwaiter().GetResult(); } finally { diff --git a/tests/SideBySide.New/ConnectionPool.cs b/tests/SideBySide.New/ConnectionPool.cs index c61d5b272..5d93c27ff 100644 --- a/tests/SideBySide.New/ConnectionPool.cs +++ b/tests/SideBySide.New/ConnectionPool.cs @@ -137,6 +137,7 @@ public async Task WaitTimeout() csb.Pooling = true; csb.MinimumPoolSize = 0; csb.MaximumPoolSize = 1; + csb.ConnectionReset = false; int serverThread; using (var connection = new MySqlConnection(csb.ConnectionString))