Skip to content

Commit 1ee5ac2

Browse files
authored
Merge pull request #222 from caleblloyd/f_session_connected
Check Session State when Disposing Connection.
2 parents fa78d00 + be4c54f commit 1ee5ac2

File tree

4 files changed

+22
-12
lines changed

4 files changed

+22
-12
lines changed

src/MySqlConnector/MySqlClient/ConnectionPool.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public void Return(MySqlSession session)
5858
{
5959
try
6060
{
61-
if (session.PoolGeneration == m_generation && session.DatabaseOverride == null)
61+
if (session.IsConnected && session.PoolGeneration == m_generation && session.DatabaseOverride == null)
6262
m_sessions.Enqueue(session);
6363
else
6464
session.DisposeAsync(IOBehavior.Synchronous, CancellationToken.None).ConfigureAwait(false);

src/MySqlConnector/MySqlClient/MySqlConnection.cs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -295,16 +295,22 @@ private void DoClose()
295295
{
296296
if (m_connectionState != ConnectionState.Closed)
297297
{
298-
CloseDatabase();
299-
if (m_session != null)
298+
try
300299
{
301-
if (m_connectionSettings.Pooling)
302-
m_session.ReturnToPool();
303-
else
304-
m_session.DisposeAsync(IOBehavior.Synchronous, CancellationToken.None).GetAwaiter().GetResult();
305-
m_session = null;
300+
CloseDatabase();
301+
}
302+
finally
303+
{
304+
if (m_session != null)
305+
{
306+
if (m_connectionSettings.Pooling)
307+
m_session.ReturnToPool();
308+
else
309+
m_session.DisposeAsync(IOBehavior.Synchronous, CancellationToken.None).GetAwaiter().GetResult();
310+
m_session = null;
311+
}
312+
SetState(ConnectionState.Closed);
306313
}
307-
SetState(ConnectionState.Closed);
308314
}
309315
}
310316

@@ -316,7 +322,7 @@ private void CloseDatabase()
316322
ActiveReader.Dispose();
317323
ActiveReader = null;
318324
}
319-
if (CurrentTransaction != null)
325+
if (CurrentTransaction != null && m_session.IsConnected)
320326
{
321327
CurrentTransaction.Dispose();
322328
CurrentTransaction = null;

src/MySqlConnector/Serialization/MySqlSession.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ public MySqlSession(ConnectionPool pool, int poolGeneration)
3636

3737
public void ReturnToPool() => Pool?.Return(this);
3838

39+
public bool IsConnected => m_state == State.Connected;
40+
3941
public async Task DisposeAsync(IOBehavior ioBehavior, CancellationToken cancellationToken)
4042
{
4143
if (m_payloadHandler != null)

tests/SideBySide/DataTypes.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,7 @@ public async Task InsertLargeBlobAsync(string column, int size)
519519
using (var connection = new MySqlConnection(AppConfig.CreateConnectionStringBuilder().ConnectionString))
520520
{
521521
await connection.OpenAsync();
522+
var transaction = await connection.BeginTransactionAsync();
522523

523524
// verify that this amount of data can be sent to MySQL successfully
524525
var maxAllowedPacket = (await connection.QueryAsync<int>("select @@max_allowed_packet").ConfigureAwait(false)).Single();
@@ -527,7 +528,7 @@ public async Task InsertLargeBlobAsync(string column, int size)
527528
var data = CreateByteArray(size);
528529

529530
long lastInsertId;
530-
using (var cmd = new MySqlCommand(Invariant($"insert into datatypes_blobs(`{column}`) values(?)"), connection)
531+
using (var cmd = new MySqlCommand(Invariant($"insert into datatypes_blobs(`{column}`) values(?)"), connection, transaction)
531532
{
532533
Parameters = { new MySqlParameter { Value = data } }
533534
})
@@ -567,6 +568,7 @@ public void InsertLargeBlobSync(string column, int size)
567568
using (var connection = new MySqlConnection(AppConfig.CreateConnectionStringBuilder().ConnectionString))
568569
{
569570
connection.Open();
571+
var transaction = connection.BeginTransaction();
570572

571573
// verify that this amount of data can be sent to MySQL successfully
572574
var maxAllowedPacket = m_database.Connection.Query<int>("select @@max_allowed_packet").Single();
@@ -575,7 +577,7 @@ public void InsertLargeBlobSync(string column, int size)
575577
var data = CreateByteArray(size);
576578

577579
long lastInsertId;
578-
using (var cmd = new MySqlCommand(Invariant($"insert into datatypes_blobs(`{column}`) values(?)"), connection)
580+
using (var cmd = new MySqlCommand(Invariant($"insert into datatypes_blobs(`{column}`) values(?)"), connection, transaction)
579581
{
580582
Parameters = { new MySqlParameter { Value = data } }
581583
})

0 commit comments

Comments
 (0)