mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
Bug #38883 (reopened): thd_security_context is not thread safe, crashes?
manual merge 5.0-->5.1, updating InnoDB plugin.
This commit is contained in:
commit
b2fc91147a
11 changed files with 9 additions and 139 deletions
|
|
@ -770,35 +770,6 @@ convert_error_code_to_mysql(
|
|||
}
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
If you want to print a thd that is not associated with the current thread,
|
||||
you must call this function before reserving the InnoDB kernel_mutex, to
|
||||
protect MySQL from setting thd->query NULL. If you print a thd of the current
|
||||
thread, we know that MySQL cannot modify thd->query, and it is not necessary
|
||||
to call this. Call innobase_mysql_end_print_arbitrary_thd() after you release
|
||||
the kernel_mutex.
|
||||
NOTE that /mysql/innobase/lock/lock0lock.c must contain the prototype for this
|
||||
function! */
|
||||
extern "C"
|
||||
void
|
||||
innobase_mysql_prepare_print_arbitrary_thd(void)
|
||||
/*============================================*/
|
||||
{
|
||||
VOID(pthread_mutex_lock(&LOCK_thread_count));
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
Releases the mutex reserved by innobase_mysql_prepare_print_arbitrary_thd().
|
||||
NOTE that /mysql/innobase/lock/lock0lock.c must contain the prototype for this
|
||||
function! */
|
||||
extern "C"
|
||||
void
|
||||
innobase_mysql_end_print_arbitrary_thd(void)
|
||||
/*========================================*/
|
||||
{
|
||||
VOID(pthread_mutex_unlock(&LOCK_thread_count));
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
Prints info of a THD object (== user session thread) to the given file.
|
||||
NOTE that /mysql/innobase/trx/trx0trx.c must contain the prototype for
|
||||
|
|
|
|||
|
|
@ -318,9 +318,7 @@ trx_commit_step(
|
|||
|
||||
/**************************************************************************
|
||||
Prints info about a transaction to the given file. The caller must own the
|
||||
kernel mutex and must have called
|
||||
innobase_mysql_prepare_print_arbitrary_thd(), unless he knows that MySQL
|
||||
or InnoDB cannot meanwhile change the info printed here. */
|
||||
kernel mutex. */
|
||||
|
||||
void
|
||||
trx_print(
|
||||
|
|
|
|||
|
|
@ -22,31 +22,6 @@ Created 5/7/1996 Heikki Tuuri
|
|||
#include "trx0sys.h"
|
||||
|
||||
|
||||
/* 2 function prototypes copied from ha_innodb.cc: */
|
||||
|
||||
/*****************************************************************
|
||||
If you want to print a thd that is not associated with the current thread,
|
||||
you must call this function before reserving the InnoDB kernel_mutex, to
|
||||
protect MySQL from setting thd->query NULL. If you print a thd of the current
|
||||
thread, we know that MySQL cannot modify thd->query, and it is not necessary
|
||||
to call this. Call innobase_mysql_end_print_arbitrary_thd() after you release
|
||||
the kernel_mutex.
|
||||
NOTE that /mysql/innobase/lock/lock0lock.c must contain the prototype for this
|
||||
function! */
|
||||
|
||||
void
|
||||
innobase_mysql_prepare_print_arbitrary_thd(void);
|
||||
/*============================================*/
|
||||
|
||||
/*****************************************************************
|
||||
Relases the mutex reserved by innobase_mysql_prepare_print_arbitrary_thd().
|
||||
NOTE that /mysql/innobase/lock/lock0lock.c must contain the prototype for this
|
||||
function! */
|
||||
|
||||
void
|
||||
innobase_mysql_end_print_arbitrary_thd(void);
|
||||
/*========================================*/
|
||||
|
||||
/* Restricts the length of search we will do in the waits-for
|
||||
graph of transactions */
|
||||
#define LOCK_MAX_N_STEPS_IN_DEADLOCK_CHECK 1000000
|
||||
|
|
@ -4222,11 +4197,6 @@ lock_print_info_summary(
|
|||
/*====================*/
|
||||
FILE* file) /* in: file where to print */
|
||||
{
|
||||
/* We must protect the MySQL thd->query field with a MySQL mutex, and
|
||||
because the MySQL mutex must be reserved before the kernel_mutex of
|
||||
InnoDB, we call innobase_mysql_prepare_print_arbitrary_thd() here. */
|
||||
|
||||
innobase_mysql_prepare_print_arbitrary_thd();
|
||||
lock_mutex_enter_kernel();
|
||||
|
||||
if (lock_deadlock_found) {
|
||||
|
|
@ -4314,7 +4284,6 @@ loop:
|
|||
|
||||
if (trx == NULL) {
|
||||
lock_mutex_exit_kernel();
|
||||
innobase_mysql_end_print_arbitrary_thd();
|
||||
|
||||
ut_ad(lock_validate());
|
||||
|
||||
|
|
@ -4386,7 +4355,6 @@ loop:
|
|||
|
||||
if (load_page_first) {
|
||||
lock_mutex_exit_kernel();
|
||||
innobase_mysql_end_print_arbitrary_thd();
|
||||
|
||||
mtr_start(&mtr);
|
||||
|
||||
|
|
@ -4397,7 +4365,6 @@ loop:
|
|||
|
||||
load_page_first = FALSE;
|
||||
|
||||
innobase_mysql_prepare_print_arbitrary_thd();
|
||||
lock_mutex_enter_kernel();
|
||||
|
||||
goto loop;
|
||||
|
|
|
|||
|
|
@ -1652,9 +1652,7 @@ trx_mark_sql_stat_end(
|
|||
|
||||
/**************************************************************************
|
||||
Prints info about a transaction to the given file. The caller must own the
|
||||
kernel mutex and must have called
|
||||
innobase_mysql_prepare_print_arbitrary_thd(), unless he knows that MySQL
|
||||
or InnoDB cannot meanwhile change the info printed here. */
|
||||
kernel mutex. */
|
||||
|
||||
void
|
||||
trx_print(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue