summaryrefslogtreecommitdiff
path: root/sql/sql_class.cc
diff options
context:
space:
mode:
authorunknown <sasha@mysql.sashanet.com>2001-03-13 23:07:12 -0700
committerunknown <sasha@mysql.sashanet.com>2001-03-13 23:07:12 -0700
commit5e90d39db91cee9dd9c43e4d4442a531277a7520 (patch)
treef48a65896e8f1e426f08cceb93c8c38055216860 /sql/sql_class.cc
parent8046201101960a7473b743372800eeb4227846b4 (diff)
downloadmariadb-git-5e90d39db91cee9dd9c43e4d4442a531277a7520.tar.gz
changed signal by fd close to signal by vio_close
added support for kill expr fixed coredump in set @a := foo; added testcase for user_var added testcase for kill sql/slave.cc: fd -> vio sql/sql_class.cc: fd->vio, fixed coredump on set @a := foo; sql/sql_class.h: fd -> vio sql/sql_repl.cc: fd -> vio sql/sql_yacc.yy: added support for kill expr - needed this for a clean test case of kill
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r--sql/sql_class.cc34
1 files changed, 29 insertions, 5 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 1bced49be57..925061594a9 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -30,6 +30,7 @@
#include "sql_acl.h"
#include <m_ctype.h>
#include <sys/stat.h>
+#include <thr_alarm.h>
#ifdef __WIN__
#include <io.h>
#endif
@@ -79,14 +80,15 @@ THD::THD():user_time(0),fatal_error(0),last_insert_id_used(0),
global_read_lock(0),bootstrap(0)
{
proc_info="login";
+ where="field list";
host=user=priv_user=db=query=ip=0;
locked=killed=count_cuted_fields=some_tables_deleted=no_errors=password=
query_start_used=0;
query_length=col_access=0;
query_error=0;
-#ifdef STOP_IO_WITH_FD_CLOSE
- active_fd = -1;
- pthread_mutex_init(&active_fd_lock, NULL);
+#ifdef SIGNAL_WITH_VIO_CLOSE
+ active_vio = 0;
+ pthread_mutex_init(&active_vio_lock, NULL);
#endif
server_id = ::server_id;
server_status=SERVER_STATUS_AUTOCOMMIT;
@@ -186,12 +188,34 @@ THD::~THD()
safeFree(ip);
free_root(&mem_root,MYF(0));
mysys_var=0; // Safety (shouldn't be needed)
-#ifdef STOP_IO_WITH_FD_CLOSE
- pthread_mutex_destroy(&active_fd_lock);
+#ifdef SIGNAL_WITH_VIO_CLOSE
+ pthread_mutex_destroy(&active_vio_lock);
#endif
DBUG_VOID_RETURN;
}
+void THD::prepare_to_die()
+{
+ thr_alarm_kill(real_id);
+ killed = 1;
+#ifdef SIGNAL_WITH_VIO_CLOSE
+ close_active_vio();
+#endif
+ if (mysys_var)
+ {
+ pthread_mutex_lock(&mysys_var->mutex);
+ if (!system_thread) // Don't abort locks
+ mysys_var->abort=1;
+ if (mysys_var->current_mutex)
+ {
+ pthread_mutex_lock(mysys_var->current_mutex);
+ pthread_cond_broadcast(mysys_var->current_cond);
+ pthread_mutex_unlock(mysys_var->current_mutex);
+ }
+ pthread_mutex_unlock(&mysys_var->mutex);
+ }
+}
+
// remember the location of thread info, the structure needed for
// sql_alloc() and the structure for the net buffer