Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
60b76cd7
Commit
60b76cd7
authored
Dec 01, 2009
by
Gleb Shchepa
Browse files
Options
Browse Files
Download
Plain Diff
Bug #38883 (reopened): thd_security_context is not thread safe, crashes?
manual merge 5.0-->5.1, updating InnoDB plugin.
parents
0dde5599
ee136e3f
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
9 additions
and
139 deletions
+9
-139
sql/sql_class.cc
sql/sql_class.cc
+5
-0
storage/innobase/handler/ha_innodb.cc
storage/innobase/handler/ha_innodb.cc
+0
-29
storage/innobase/include/trx0trx.h
storage/innobase/include/trx0trx.h
+1
-3
storage/innobase/lock/lock0lock.c
storage/innobase/lock/lock0lock.c
+0
-33
storage/innobase/trx/trx0trx.c
storage/innobase/trx/trx0trx.c
+1
-3
storage/innodb_plugin/handler/ha_innodb.cc
storage/innodb_plugin/handler/ha_innodb.cc
+0
-30
storage/innodb_plugin/include/ha_prototypes.h
storage/innodb_plugin/include/ha_prototypes.h
+0
-22
storage/innodb_plugin/include/trx0trx.h
storage/innodb_plugin/include/trx0trx.h
+1
-3
storage/innodb_plugin/lock/lock0lock.c
storage/innodb_plugin/lock/lock0lock.c
+0
-8
storage/innodb_plugin/trx/trx0i_s.c
storage/innodb_plugin/trx/trx0i_s.c
+0
-5
storage/innodb_plugin/trx/trx0trx.c
storage/innodb_plugin/trx/trx0trx.c
+1
-3
No files found.
sql/sql_class.cc
View file @
60b76cd7
...
...
@@ -376,6 +376,8 @@ char *thd_security_context(THD *thd, char *buffer, unsigned int length,
str
.
append
(
proc_info
);
}
pthread_mutex_lock
(
&
thd
->
LOCK_thd_data
);
if
(
thd
->
query
())
{
if
(
max_query_len
<
1
)
...
...
@@ -385,6 +387,9 @@ char *thd_security_context(THD *thd, char *buffer, unsigned int length,
str
.
append
(
'\n'
);
str
.
append
(
thd
->
query
(),
len
);
}
pthread_mutex_unlock
(
&
thd
->
LOCK_thd_data
);
if
(
str
.
c_ptr_safe
()
==
buffer
)
return
buffer
;
...
...
storage/innobase/handler/ha_innodb.cc
View file @
60b76cd7
...
...
@@ -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
...
...
storage/innobase/include/trx0trx.h
View file @
60b76cd7
...
...
@@ -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
(
...
...
storage/innobase/lock/lock0lock.c
View file @
60b76cd7
...
...
@@ -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 @@ lock_print_info_all_transactions(
if
(
trx
==
NULL
)
{
lock_mutex_exit_kernel
();
innobase_mysql_end_print_arbitrary_thd
();
ut_ad
(
lock_validate
());
...
...
@@ -4386,7 +4355,6 @@ lock_print_info_all_transactions(
if
(
load_page_first
)
{
lock_mutex_exit_kernel
();
innobase_mysql_end_print_arbitrary_thd
();
mtr_start
(
&
mtr
);
...
...
@@ -4397,7 +4365,6 @@ lock_print_info_all_transactions(
load_page_first
=
FALSE
;
innobase_mysql_prepare_print_arbitrary_thd
();
lock_mutex_enter_kernel
();
goto
loop
;
...
...
storage/innobase/trx/trx0trx.c
View file @
60b76cd7
...
...
@@ -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
(
...
...
storage/innodb_plugin/handler/ha_innodb.cc
View file @
60b76cd7
...
...
@@ -898,36 +898,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. */
extern
"C"
UNIV_INTERN
void
innobase_mysql_prepare_print_arbitrary_thd
(
void
)
/*============================================*/
{
ut_ad
(
!
mutex_own
(
&
kernel_mutex
));
VOID
(
pthread_mutex_lock
(
&
LOCK_thread_count
));
}
/*************************************************************//**
Releases the mutex reserved by innobase_mysql_prepare_print_arbitrary_thd().
In the InnoDB latching order, the mutex sits right above the
kernel_mutex. In debug builds, we assert that the kernel_mutex is
released before this function is invoked. */
extern
"C"
UNIV_INTERN
void
innobase_mysql_end_print_arbitrary_thd
(
void
)
/*========================================*/
{
ut_ad
(
!
mutex_own
(
&
kernel_mutex
));
VOID
(
pthread_mutex_unlock
(
&
LOCK_thread_count
));
}
/*************************************************************//**
Prints info of a THD object (== user session thread) to the given file. */
extern
"C"
UNIV_INTERN
...
...
storage/innodb_plugin/include/ha_prototypes.h
View file @
60b76cd7
...
...
@@ -153,28 +153,6 @@ get_innobase_type_from_mysql_type(
const
void
*
field
)
/*!< in: MySQL Field */
__attribute__
((
nonnull
));
/*************************************************************//**
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. */
UNIV_INTERN
void
innobase_mysql_prepare_print_arbitrary_thd
(
void
);
/*============================================*/
/*************************************************************//**
Releases the mutex reserved by innobase_mysql_prepare_print_arbitrary_thd().
In the InnoDB latching order, the mutex sits right above the
kernel_mutex. In debug builds, we assert that the kernel_mutex is
released before this function is invoked. */
UNIV_INTERN
void
innobase_mysql_end_print_arbitrary_thd
(
void
);
/*========================================*/
/******************************************************************//**
Get the variable length bounds of the given character set. */
UNIV_INTERN
...
...
storage/innodb_plugin/include/trx0trx.h
View file @
60b76cd7
...
...
@@ -338,9 +338,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. */
UNIV_INTERN
void
trx_print
(
...
...
storage/innodb_plugin/lock/lock0lock.c
View file @
60b76cd7
...
...
@@ -4324,11 +4324,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
)
{
...
...
@@ -4411,7 +4406,6 @@ lock_print_info_all_transactions(
if
(
trx
==
NULL
)
{
lock_mutex_exit_kernel
();
innobase_mysql_end_print_arbitrary_thd
();
ut_ad
(
lock_validate
());
...
...
@@ -4495,7 +4489,6 @@ lock_print_info_all_transactions(
}
lock_mutex_exit_kernel
();
innobase_mysql_end_print_arbitrary_thd
();
mtr_start
(
&
mtr
);
...
...
@@ -4506,7 +4499,6 @@ lock_print_info_all_transactions(
load_page_first
=
FALSE
;
innobase_mysql_prepare_print_arbitrary_thd
();
lock_mutex_enter_kernel
();
goto
loop
;
...
...
storage/innodb_plugin/trx/trx0i_s.c
View file @
60b76cd7
...
...
@@ -1205,9 +1205,6 @@ trx_i_s_possibly_fetch_data_into_cache(
return
(
1
);
}
/* We are going to access trx->query in all transactions */
innobase_mysql_prepare_print_arbitrary_thd
();
/* We need to read trx_sys and record/table lock queues */
mutex_enter
(
&
kernel_mutex
);
...
...
@@ -1215,8 +1212,6 @@ trx_i_s_possibly_fetch_data_into_cache(
mutex_exit
(
&
kernel_mutex
);
innobase_mysql_end_print_arbitrary_thd
();
return
(
0
);
}
...
...
storage/innodb_plugin/trx/trx0trx.c
View file @
60b76cd7
...
...
@@ -1636,9 +1636,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. */
UNIV_INTERN
void
trx_print
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment