summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorunknown <iggy@amd64.(none)>2008-03-28 15:00:35 -0400
committerunknown <iggy@amd64.(none)>2008-03-28 15:00:35 -0400
commita30b1d9d44cac0dc26e54652b41c1aa5689b3c56 (patch)
tree3995cb06d8a8099fcf5cfd9690055f65f4b328bc /client
parent74c2a019232e2814b3af8a105ccf881d96200ae3 (diff)
parentf6bd80dc372dddccde77ea0e4a20ec4f3f136e7f (diff)
downloadmariadb-git-a30b1d9d44cac0dc26e54652b41c1aa5689b3c56.tar.gz
Merge amd64.(none):/src/mysql-5.1-bugteam
into amd64.(none):/src/bug26243/my51-bug26243 libmysql/libmysql.c: Auto merged sql/mysqld.cc: Auto merged sql/set_var.cc: Auto merged sql/slave.cc: Auto merged sql/sql_cache.cc: Auto merged sql/sql_select.cc: Auto merged storage/federated/ha_federated.cc: Auto merged storage/innobase/handler/ha_innodb.cc: Auto merged storage/myisam/mi_open.c: Auto merged storage/myisammrg/ha_myisammrg.cc: Auto merged tests/mysql_client_test.c: Auto merged
Diffstat (limited to 'client')
-rw-r--r--client/mysql.cc20
1 files changed, 18 insertions, 2 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 79d8ef0a35c..234180c3c75 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -1269,12 +1269,12 @@ sig_handler handle_sigint(int sig)
/* terminate if no query being executed, or we already tried interrupting */
if (!executing_query || interrupted_query)
- mysql_end(sig);
+ goto err;
kill_mysql= mysql_init(kill_mysql);
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
"", opt_mysql_port, opt_mysql_unix_port,0))
- mysql_end(sig);
+ goto err;
/* kill_buffer is always big enough because max length of %lu is 15 */
sprintf(kill_buffer, "KILL /*!50000 QUERY */ %lu", mysql_thread_id(&mysql));
@@ -1283,6 +1283,22 @@ sig_handler handle_sigint(int sig)
tee_fprintf(stdout, "Query aborted by Ctrl+C\n");
interrupted_query= 1;
+
+ return;
+
+err:
+#ifdef _WIN32
+ /*
+ When SIGINT is raised on Windows, the OS creates a new thread to handle the
+ interrupt. Once that thread completes, the main thread continues running
+ only to find that it's resources have already been free'd when the sigint
+ handler called mysql_end().
+ */
+ mysql_thread_end();
+ return;
+#else
+ mysql_end(sig);
+#endif
}