Index: source/thirdparty/MySql.Data/Source/command.cs =================================================================== --- source/thirdparty/MySql.Data/Source/command.cs (revision 3427) +++ source/thirdparty/MySql.Data/Source/command.cs (working copy) @@ -439,6 +439,12 @@ connection.HandleTimeout(tex); return null; } + catch (ThreadAbortException ex) + { + connection.HandleFatalException(ex); + + throw; + } catch (MySqlException ex) { connection.Reader = null; Index: source/thirdparty/MySql.Data/Source/Connection.cs =================================================================== --- source/thirdparty/MySql.Data/Source/Connection.cs (revision 3427) +++ source/thirdparty/MySql.Data/Source/Connection.cs (working copy) @@ -642,7 +642,27 @@ return cmd.ExecuteScalar().ToString(); } + internal void HandleFatalException(Exception exception) + { + try + { + CancelQuery(5); + driver.ResetTimeout(5000); + if (Reader != null) + { + Reader.Close(); + Reader = null; + } + } + catch (Exception ex) + { + MySqlTrace.LogWarning( + ServerThread, + "Could not kill query in fatal exception handler, aborting connection. Exception was " + ex.Message); + Abort(); + } + } internal void HandleTimeout(TimeoutException tex) { Index: source/thirdparty/MySql.Data/Source/datareader.cs =================================================================== --- source/thirdparty/MySql.Data/Source/datareader.cs (revision 3427) +++ source/thirdparty/MySql.Data/Source/datareader.cs (working copy) @@ -27,6 +27,7 @@ using System.Collections.Generic; using System.Globalization; using MySql.Data.MySqlClient.Properties; +using System.Threading; namespace MySql.Data.MySqlClient { @@ -879,6 +880,12 @@ connection.HandleTimeout(tex); return false; // unreached } + catch (ThreadAbortException ex) + { + connection.HandleFatalException(ex); + + throw; + } catch (MySqlException ex) { if (ex.IsFatal)