From: Date: October 20 2008 10:48pm Subject: Connector/NET commit: r1440 - in branches/5.2: . MySql.Data/Provider/Source MySql.Data/Tests/Source List-Archive: http://lists.mysql.com/commits/56628 X-Bug: 40091 Message-Id: <200810202048.m9KKm1YJ024409@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modified: branches/5.2/CHANGES branches/5.2/MySql.Data/Provider/Source/command.cs branches/5.2/MySql.Data/Tests/Source/TimeoutAndCancel.cs Log: - fixed problem that caused in use connection strings to be modified when a pooled connection timed out and was cancelled. (bug #40091) The problem was that we were creating our connection object before setting the pooling property to false. This caused a connection to be made in an existing connection string cache which caused all the connection strings in that cache to change when we set our pooling property. The fix was to create a connection string builder object, set the pooling property, and then create the connection object. Modified: branches/5.2/CHANGES =================================================================== --- branches/5.2/CHANGES 2008-10-20 19:28:41 UTC (rev 1439) +++ branches/5.2/CHANGES 2008-10-20 20:48:01 UTC (rev 1440) @@ -24,6 +24,8 @@ - fixed bug where specifying 'functions return string=yes' would cause strings to be returned using the 'binary' charset which would not properly render some characters. Now the connection character set is used. (bug #40076) +- fixed problem that caused in use connection strings to be modified when a pooled connection + timed out and was cancelled. (bug #40091) Version 5.2.3 - 8/14/08 Modified: branches/5.2/MySql.Data/Provider/Source/command.cs =================================================================== --- branches/5.2/MySql.Data/Provider/Source/command.cs 2008-10-20 19:28:41 UTC (rev 1439) +++ branches/5.2/MySql.Data/Provider/Source/command.cs 2008-10-20 20:48:01 UTC (rev 1440) @@ -254,9 +254,11 @@ if (!connection.driver.Version.isAtLeast(5, 0, 0)) throw new NotSupportedException(Resources.CancelNotSupported); - using(MySqlConnection c = new MySqlConnection(connection.Settings.GetConnectionString(true))) + MySqlConnectionStringBuilder cb = new MySqlConnectionStringBuilder( + connection.Settings.GetConnectionString(true)); + cb.Pooling = false; + using(MySqlConnection c = new MySqlConnection(cb.ConnectionString)) { - c.Settings.Pooling = false; c.Open(); MySqlCommand cmd = new MySqlCommand(String.Format("KILL QUERY {0}", connection.ServerThread), c); Modified: branches/5.2/MySql.Data/Tests/Source/TimeoutAndCancel.cs =================================================================== --- branches/5.2/MySql.Data/Tests/Source/TimeoutAndCancel.cs 2008-10-20 19:28:41 UTC (rev 1439) +++ branches/5.2/MySql.Data/Tests/Source/TimeoutAndCancel.cs 2008-10-20 20:48:01 UTC (rev 1440) @@ -232,5 +232,35 @@ } Assert.IsTrue(rows < 10000); } + + /// + /// Bug #40091 mysql driver 5.2.3.0 connection pooling issue + /// + [Test] + public void ConnectionStringModifiedAfterCancel() + { + bool isPooling = pooling; + pooling = true; + string connStr = GetConnectionString(true); + pooling = isPooling; + connStr = connStr.Replace("persist security info=true", "persist security info=false"); + + using (MySqlConnection c = new MySqlConnection(connStr)) + { + c.Open(); + string connStr1 = c.ConnectionString; + + MySqlCommand cmd = new MySqlCommand("SELECT SLEEP(10)", c); + cmd.CommandTimeout = 5; + + using (MySqlDataReader reader = cmd.ExecuteReader()) + { + string connStr2 = c.ConnectionString.ToLowerInvariant(); + Assert.AreEqual(-1, connStr2.IndexOf("pooling=true")); + Assert.AreEqual(-1, connStr2.IndexOf("pooling=false")); + reader.Read(); + } + } + } } }