Skip to content

Commit 2f95bb2

Browse files
committed
Fix hang when disposing MySqlDataSource twice on .NET Framework.
1 parent ebcf3cf commit 2f95bb2

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/MySqlConnector/Core/ConnectionPool.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,12 +250,14 @@ public void Dispose()
250250
using var dnsCheckWaitHandle = new ManualResetEvent(false);
251251
m_dnsCheckTimer.Dispose(dnsCheckWaitHandle);
252252
dnsCheckWaitHandle.WaitOne();
253+
m_dnsCheckTimer = null;
253254
}
254255
if (m_reaperTimer is not null)
255256
{
256257
using var reaperWaitHandle = new ManualResetEvent(false);
257258
m_reaperTimer.Dispose(reaperWaitHandle);
258259
reaperWaitHandle.WaitOne();
260+
m_reaperTimer = null;
259261
}
260262
#endif
261263
}

tests/IntegrationTests/MySqlDataSourceTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@ public void OpenConnection()
2525
Assert.Equal(ConnectionState.Open, connection.State);
2626
}
2727

28+
[Fact]
29+
public void DoubleDispose()
30+
{
31+
using var dbSource = new MySqlDataSource(AppConfig.ConnectionString);
32+
using (var connection = dbSource.OpenConnection())
33+
{
34+
Assert.Equal(ConnectionState.Open, connection.State);
35+
}
36+
dbSource.Dispose();
37+
}
38+
2839
[Fact]
2940
public async Task OpenConnectionAsync()
3041
{

0 commit comments

Comments
 (0)