Bug #42801 | ClearPool .Net connector : NullReferenceException | ||
---|---|---|---|
Submitted: | 12 Feb 2009 18:52 | Modified: | 3 Apr 2009 13:46 |
Reporter: | Guillaume M | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | Connector / NET | Severity: | S2 (Serious) |
Version: | 5.2.5 | OS: | Windows (Windows Seven 64) |
Assigned to: | CPU Architecture: | Any | |
Tags: | ClearPool, connector, exception, MySqlConnection, null, reference |
[12 Feb 2009 18:52]
Guillaume M
[12 Feb 2009 19:03]
Guillaume M
And of course, connection is not null ;) I double checked it.
[12 Feb 2009 20:13]
Tonci Grgin
Hi Guillaume and thanks for your report. I hate to say this but you'll get same answer for second one. >> This does not look like bug report at all << Please attach small but *complete* test case demonstrating this problem each time I run it. Also, please include all necessary info for successful recreation of environment (in this case MySQL server version, .NET FW version ...).
[13 Mar 2009 0:00]
Bugs System
No feedback was provided for this bug for over a month, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open".
[24 Mar 2009 7:36]
Bogdan Degtyariov
Clearing connection pool twice for different MysqlConnection objects can result in a null-reference exception. If one MysqlConnection has already cleaned the connection pool, repeating the same procedure will cause referencing of non-existing hash table element. How to repeat: Run the following C# code MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder(); builder.MinimumPoolSize = 0; builder.Pooling = true; builder.Server = "localhost"; builder.UserID = "*****"; builder.Password = "******"; builder.PersistSecurityInfo = false; MySqlConnection connection1 = null; MySqlConnection connection2 = null; try { connection1 = new MySqlConnection(builder.ConnectionString); connection2 = new MySqlConnection(builder.ConnectionString); connection1.Open(); connection2.Open(); connection1.Close(); connection2.Close(); MySqlConnection.ClearPool(connection1); MySqlConnection.ClearPool(connection2); catch (Exception ex) { string error = ex.Message.ToString(); error+= ex.StackTrace; MessageBox.Show(error); } Suggested fix: Index: MySql.Data/Provider/Source/MySqlPoolManager.cs =================================================================== --- MySql.Data/Provider/Source/MySqlPoolManager.cs (revision 1526) +++ MySql.Data/Provider/Source/MySqlPoolManager.cs (working copy) @@ -90,6 +90,11 @@ { // add the pool to our list of pools being cleared MySqlPool pool = (pools[key] as MySqlPool); + + // Check if the pool has already been cleared + if (pool == null) + return; + clearingPools.Add(pool); // now tell the pool to clear itself This bug affects version 6.0 as well
[25 Mar 2009 17:29]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/70400
[25 Mar 2009 17:35]
Reggie Burnett
fixed in 5.2.6 and 6.0+
[3 Apr 2009 13:46]
Tony Bedford
An entry was added to the 5.2.6 and 6.0.0 changelogs: A null reference exception was generated when MySqlConnection.ClearPool(connection) was called.