summaryrefslogtreecommitdiff
path: root/sql/log.h
diff options
context:
space:
mode:
authorunknown <ramil/ram@mysql.com/ramil.myoffice.izhnet.ru>2007-06-17 09:56:33 +0500
committerunknown <ramil/ram@mysql.com/ramil.myoffice.izhnet.ru>2007-06-17 09:56:33 +0500
commitfbfa18daf0266131f64edbf088493bca933780c1 (patch)
tree9b7ba0d8f6adc066e61a7d8f37402b69711ec0af /sql/log.h
parentad18354c8ea62cf49afcbdcb3e82ac377975800a (diff)
downloadmariadb-git-fbfa18daf0266131f64edbf088493bca933780c1.tar.gz
Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock
The log tables are by nature PERFORMANCE_SCHEMA tables, which should not be affected by SET GLOBAL READ_ONLY or FLUSH TABLES WITH READ LOCK. The implementation of FLUSH TABLES WITH READ LOCK already ignored log tables. Now with this patch, the implementation of LOCK TABLE also ignore a global read lock for log tables, which was the missing symmetry. mysql-test/r/flush.result: Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock - test result. mysql-test/t/flush.test: Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock - test case. sql/lock.cc: Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock - logger.is_privileged_thread() used. sql/log.h: Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock - LOGGER::is_privileged_thread() introduced that returns TRUE if a given thread is either a general_log or a slow_log or a privileged thread. sql/sql_base.cc: Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock - pass MYSQL_LOCK_IGNORE_GLOBAL_READ_LOCK to the mysql_lock_tables() in case of call from a logger in order not to honor the GLOBAL READ LOCK and to avoid possible deadlocks.
Diffstat (limited to 'sql/log.h')
-rw-r--r--sql/log.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/sql/log.h b/sql/log.h
index 25bcbd6c62d..d92e0117bcc 100644
--- a/sql/log.h
+++ b/sql/log.h
@@ -600,6 +600,12 @@ public:
else
return NULL;
}
+ bool is_privileged_thread(THD *thd)
+ {
+ return thd == get_general_log_thd() ||
+ thd == get_slow_log_thd() ||
+ thd == get_privileged_thread();
+ }
};
enum enum_binlog_format {