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
9a49d2d4
Commit
9a49d2d4
authored
Sep 16, 2010
by
Jon Olav Hauglid
Browse files
Options
Browse Files
Download
Plain Diff
Merge from mysql-5.5-bugfixing to mysql-5.5-runtime.
parents
2d557a86
c5ec3b3b
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
190 additions
and
34 deletions
+190
-34
dbug/dbug.c
dbug/dbug.c
+1
-5
include/mysql/service_my_snprintf.h
include/mysql/service_my_snprintf.h
+1
-1
mysql-test/suite/perfschema/include/upgrade_check.inc
mysql-test/suite/perfschema/include/upgrade_check.inc
+1
-1
mysql-test/suite/perfschema/r/checksum.result
mysql-test/suite/perfschema/r/checksum.result
+34
-0
mysql-test/suite/perfschema/t/checksum.test
mysql-test/suite/perfschema/t/checksum.test
+64
-0
mysql-test/valgrind.supp
mysql-test/valgrind.supp
+25
-0
sql/mysqld.cc
sql/mysqld.cc
+20
-12
storage/perfschema/ha_perfschema.cc
storage/perfschema/ha_perfschema.cc
+12
-0
storage/perfschema/table_events_waits.cc
storage/perfschema/table_events_waits.cc
+13
-7
storage/perfschema/table_events_waits.h
storage/perfschema/table_events_waits.h
+1
-1
strings/my_vsnprintf.c
strings/my_vsnprintf.c
+8
-6
unittest/mysys/my_vsnprintf-t.c
unittest/mysys/my_vsnprintf-t.c
+10
-1
No files found.
dbug/dbug.c
View file @
9a49d2d4
...
...
@@ -1335,15 +1335,11 @@ void _db_doprnt_(const char *format,...)
* This function is intended as a
* vfprintf clone with consistent, platform independent output for
* problematic formats like %p, %zd and %lld.
* However: full functionality for my_vsnprintf has not been backported yet,
* so code using "%g" or "%f" will have undefined behaviour.
*/
static
void
DbugVfprintf
(
FILE
*
stream
,
const
char
*
format
,
va_list
args
)
{
char
cvtbuf
[
1024
];
size_t
len
;
/* Do not use my_vsnprintf, it does not support "%g". */
len
=
vsnprintf
(
cvtbuf
,
sizeof
(
cvtbuf
),
format
,
args
);
(
void
)
my_vsnprintf
(
cvtbuf
,
sizeof
(
cvtbuf
),
format
,
args
);
(
void
)
fprintf
(
stream
,
"%s
\n
"
,
cvtbuf
);
}
...
...
include/mysql/service_my_snprintf.h
View file @
9a49d2d4
...
...
@@ -53,7 +53,7 @@
<length modifier> can be 'l', 'll', or 'z'.
Supported formats are 's' (null pointer is accepted, printed as
"(null)"), 'b' (extension, see below), 'c', 'd', 'u', 'x', 'o',
"(null)"), 'b' (extension, see below), 'c', 'd', '
i', '
u', 'x', 'o',
'X', 'p' (works as 0x%x).
Standard syntax for positional arguments $n is supported.
...
...
mysql-test/suite/perfschema/include/upgrade_check.inc
View file @
9a49d2d4
...
...
@@ -18,7 +18,7 @@
#
--
error
1
--
exec
$MYSQL_UPGRADE
--
skip
-
verbose
>
$out_file
2
>
$err_file
--
exec
$MYSQL_UPGRADE
--
skip
-
verbose
--
force
>
$out_file
2
>
$err_file
# Verify that mysql_upgrade complained about the performance_schema
--
cat_file
$err_file
...
...
mysql-test/suite/perfschema/r/checksum.result
0 → 100644
View file @
9a49d2d4
checksum table performance_schema.COND_INSTANCES;
checksum table performance_schema.EVENTS_WAITS_CURRENT;
checksum table performance_schema.EVENTS_WAITS_HISTORY;
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
checksum table performance_schema.FILE_INSTANCES;
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE;
checksum table performance_schema.MUTEX_INSTANCES;
checksum table performance_schema.PERFORMANCE_TIMERS;
checksum table performance_schema.RWLOCK_INSTANCES;
checksum table performance_schema.SETUP_CONSUMERS;
checksum table performance_schema.SETUP_INSTRUMENTS;
checksum table performance_schema.SETUP_TIMERS;
checksum table performance_schema.THREADS;
checksum table performance_schema.COND_INSTANCES extended;
checksum table performance_schema.EVENTS_WAITS_CURRENT extended;
checksum table performance_schema.EVENTS_WAITS_HISTORY extended;
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG extended;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE extended;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME extended;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME extended;
checksum table performance_schema.FILE_INSTANCES extended;
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME extended;
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE extended;
checksum table performance_schema.MUTEX_INSTANCES extended;
checksum table performance_schema.PERFORMANCE_TIMERS extended;
checksum table performance_schema.RWLOCK_INSTANCES extended;
checksum table performance_schema.SETUP_CONSUMERS extended;
checksum table performance_schema.SETUP_INSTRUMENTS extended;
checksum table performance_schema.SETUP_TIMERS extended;
checksum table performance_schema.THREADS extended;
mysql-test/suite/perfschema/t/checksum.test
0 → 100644
View file @
9a49d2d4
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
# Tests for PERFORMANCE_SCHEMA
--
source
include
/
not_embedded
.
inc
--
source
include
/
have_perfschema
.
inc
#
# The checksum value itself is random (data is volatile),
# just testing that this does not crash
#
--
disable_result_log
checksum
table
performance_schema
.
COND_INSTANCES
;
checksum
table
performance_schema
.
EVENTS_WAITS_CURRENT
;
checksum
table
performance_schema
.
EVENTS_WAITS_HISTORY
;
checksum
table
performance_schema
.
EVENTS_WAITS_HISTORY_LONG
;
checksum
table
performance_schema
.
EVENTS_WAITS_SUMMARY_BY_INSTANCE
;
checksum
table
performance_schema
.
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
;
checksum
table
performance_schema
.
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
;
checksum
table
performance_schema
.
FILE_INSTANCES
;
checksum
table
performance_schema
.
FILE_SUMMARY_BY_EVENT_NAME
;
checksum
table
performance_schema
.
FILE_SUMMARY_BY_INSTANCE
;
checksum
table
performance_schema
.
MUTEX_INSTANCES
;
checksum
table
performance_schema
.
PERFORMANCE_TIMERS
;
checksum
table
performance_schema
.
RWLOCK_INSTANCES
;
checksum
table
performance_schema
.
SETUP_CONSUMERS
;
checksum
table
performance_schema
.
SETUP_INSTRUMENTS
;
checksum
table
performance_schema
.
SETUP_TIMERS
;
checksum
table
performance_schema
.
THREADS
;
checksum
table
performance_schema
.
COND_INSTANCES
extended
;
checksum
table
performance_schema
.
EVENTS_WAITS_CURRENT
extended
;
checksum
table
performance_schema
.
EVENTS_WAITS_HISTORY
extended
;
checksum
table
performance_schema
.
EVENTS_WAITS_HISTORY_LONG
extended
;
checksum
table
performance_schema
.
EVENTS_WAITS_SUMMARY_BY_INSTANCE
extended
;
checksum
table
performance_schema
.
EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
extended
;
checksum
table
performance_schema
.
EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME
extended
;
checksum
table
performance_schema
.
FILE_INSTANCES
extended
;
checksum
table
performance_schema
.
FILE_SUMMARY_BY_EVENT_NAME
extended
;
checksum
table
performance_schema
.
FILE_SUMMARY_BY_INSTANCE
extended
;
checksum
table
performance_schema
.
MUTEX_INSTANCES
extended
;
checksum
table
performance_schema
.
PERFORMANCE_TIMERS
extended
;
checksum
table
performance_schema
.
RWLOCK_INSTANCES
extended
;
checksum
table
performance_schema
.
SETUP_CONSUMERS
extended
;
checksum
table
performance_schema
.
SETUP_INSTRUMENTS
extended
;
checksum
table
performance_schema
.
SETUP_TIMERS
extended
;
checksum
table
performance_schema
.
THREADS
extended
;
--
enable_result_log
mysql-test/valgrind.supp
View file @
9a49d2d4
...
...
@@ -745,3 +745,28 @@
Memcheck:Addr1
fun:buf_buddy_relocate
}
#
# See related Bug#56666
# Race condition between the server main thread and the kill server thread.
#
# Because of this race condition, the call to shutdown_performance_schema()
# was commented in sql/mysqld.cc, causing the reported leaks.
#
{
missing shutdown_performance_schema 1
Memcheck:Leak
fun:malloc
fun:_Z10pfs_mallocmi
}
{
missing shutdown_performance_schema 2
Memcheck:Leak
fun:malloc
fun:my_malloc
fun:_lf_alloc_new
fun:lf_hash_insert
}
sql/mysqld.cc
View file @
9a49d2d4
...
...
@@ -1395,6 +1395,12 @@ static void mysqld_exit(int exit_code)
mysql_audit_finalize
();
clean_up_mutexes
();
clean_up_error_log_mutex
();
#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
/*
Bug#56666 needs to be fixed before calling:
shutdown_performance_schema();
*/
#endif
my_end
(
opt_endinfo
?
MY_CHECK_ERROR
|
MY_GIVE_INFO
:
0
);
exit
(
exit_code
);
/* purecov: inspected */
}
...
...
@@ -2733,6 +2739,11 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused)))
if
(
!
abort_loop
)
{
abort_loop
=
1
;
// mark abort for threads
#ifdef HAVE_PSI_INTERFACE
/* Delete the instrumentation for the signal thread */
if
(
likely
(
PSI_server
!=
NULL
))
PSI_server
->
delete_current_thread
();
#endif
#ifdef USE_ONE_SIGNAL_HAND
pthread_t
tmp
;
if
(
mysql_thread_create
(
0
,
/* Not instrumented */
...
...
@@ -4588,6 +4599,15 @@ int mysqld_main(int argc, char **argv)
#endif
#endif
/* __WIN__ */
#ifdef HAVE_PSI_INTERFACE
/*
Disable the main thread instrumentation,
to avoid recording events during the shutdown.
*/
if
(
PSI_server
)
PSI_server
->
delete_current_thread
();
#endif
/* Wait until cleanup is done */
mysql_mutex_lock
(
&
LOCK_thread_count
);
while
(
!
ready_to_exit
)
...
...
@@ -4605,18 +4625,6 @@ int mysqld_main(int argc, char **argv)
}
#endif
clean_up
(
1
);
#ifdef HAVE_PSI_INTERFACE
/*
Disable the instrumentation, to avoid recording events
during the shutdown.
*/
if
(
PSI_server
)
{
PSI_server
->
delete_current_thread
();
PSI_server
=
NULL
;
}
shutdown_performance_schema
();
#endif
mysqld_exit
(
0
);
}
...
...
storage/perfschema/ha_perfschema.cc
View file @
9a49d2d4
...
...
@@ -20,6 +20,7 @@
#include "my_global.h"
#include "my_pthread.h"
#include "my_atomic.h"
#include "sql_plugin.h"
#include "mysql/plugin.h"
#include "ha_perfschema.h"
...
...
@@ -28,6 +29,17 @@
#include "pfs_instr_class.h"
#include "pfs_instr.h"
#ifdef MY_ATOMIC_MODE_DUMMY
/*
The performance schema can can not function with MY_ATOMIC_MODE_DUMMY,
a fully functional implementation of MY_ATOMIC should be used instead.
If the build fails with this error message:
- either use a different ./configure --with-atomic-ops option
- or do not build with the performance schema.
*/
#error "The performance schema needs a functional MY_ATOMIC implementation."
#endif
handlerton
*
pfs_hton
=
NULL
;
static
handler
*
pfs_create_handler
(
handlerton
*
hton
,
...
...
storage/perfschema/table_events_waits.cc
View file @
9a49d2d4
...
...
@@ -187,7 +187,7 @@ void table_events_waits_common::clear_object_columns()
*/
void
table_events_waits_common
::
make_row
(
bool
thread_own_wait
,
PFS_thread
*
pfs_thread
,
PFS_events_waits
*
wait
)
volatile
PFS_events_waits
*
wait
)
{
pfs_lock
lock
;
PFS_thread
*
safe_thread
;
...
...
@@ -251,21 +251,27 @@ void table_events_waits_common::make_row(bool thread_own_wait,
case
WAIT_CLASS_TABLE
:
m_row
.
m_object_type
=
"TABLE"
;
m_row
.
m_object_type_length
=
5
;
memcpy
(
m_row
.
m_object_schema
,
wait
->
m_schema_name
,
wait
->
m_schema_name_length
);
m_row
.
m_object_schema_length
=
wait
->
m_schema_name_length
;
memcpy
(
m_row
.
m_object_name
,
wait
->
m_object_name
,
wait
->
m_object_name_length
);
if
(
unlikely
((
m_row
.
m_object_schema_length
==
0
)
||
(
m_row
.
m_object_schema_length
>
sizeof
(
m_row
.
m_object_schema
))))
return
;
memcpy
(
m_row
.
m_object_schema
,
wait
->
m_schema_name
,
m_row
.
m_object_schema_length
);
m_row
.
m_object_name_length
=
wait
->
m_object_name_length
;
if
(
unlikely
((
m_row
.
m_object_name_length
==
0
)
||
(
m_row
.
m_object_name_length
>
sizeof
(
m_row
.
m_object_name
))))
return
;
memcpy
(
m_row
.
m_object_name
,
wait
->
m_object_name
,
m_row
.
m_object_name_length
);
safe_class
=
&
global_table_class
;
break
;
case
WAIT_CLASS_FILE
:
m_row
.
m_object_type
=
"FILE"
;
m_row
.
m_object_type_length
=
4
;
m_row
.
m_object_schema_length
=
0
;
memcpy
(
m_row
.
m_object_name
,
wait
->
m_object_name
,
wait
->
m_object_name_length
);
m_row
.
m_object_name_length
=
wait
->
m_object_name_length
;
if
(
unlikely
((
m_row
.
m_object_name_length
==
0
)
||
(
m_row
.
m_object_name_length
>
sizeof
(
m_row
.
m_object_name
))))
return
;
memcpy
(
m_row
.
m_object_name
,
wait
->
m_object_name
,
m_row
.
m_object_name_length
);
safe_class
=
sanitize_file_class
((
PFS_file_class
*
)
wait
->
m_class
);
break
;
case
NO_WAIT_CLASS
:
...
...
storage/perfschema/table_events_waits.h
View file @
9a49d2d4
...
...
@@ -137,7 +137,7 @@ class table_events_waits_common : public PFS_engine_table
void
clear_object_columns
();
void
make_row
(
bool
thread_own_wait
,
PFS_thread
*
pfs_thread
,
PFS_events_waits
*
wait
);
volatile
PFS_events_waits
*
wait
);
/** Current row. */
row_events_waits
m_row
;
...
...
strings/my_vsnprintf.c
View file @
9a49d2d4
...
...
@@ -255,7 +255,7 @@ static char *process_int_arg(char *to, char *end, size_t length,
if
((
to_length
=
(
size_t
)
(
end
-
to
))
<
16
||
length
)
store_start
=
buff
;
if
(
arg_type
==
'd'
)
if
(
arg_type
==
'd'
||
arg_type
==
'i'
)
store_end
=
longlong10_to_str
(
par
,
store_start
,
-
10
);
else
if
(
arg_type
==
'u'
)
store_end
=
longlong10_to_str
(
par
,
store_start
,
10
);
...
...
@@ -399,6 +399,7 @@ static char *process_args(CHARSET_INFO *cs, char *to, char *end,
args_arr
[
i
].
double_arg
=
va_arg
(
ap
,
double
);
break
;
case
'd'
:
case
'i'
:
case
'u'
:
case
'x'
:
case
'X'
:
...
...
@@ -406,7 +407,7 @@ static char *process_args(CHARSET_INFO *cs, char *to, char *end,
case
'p'
:
if
(
args_arr
[
i
].
have_longlong
)
args_arr
[
i
].
longlong_arg
=
va_arg
(
ap
,
longlong
);
else
if
(
args_arr
[
i
].
arg_type
==
'd'
)
else
if
(
args_arr
[
i
].
arg_type
==
'd'
||
args_arr
[
i
].
arg_type
==
'i'
)
args_arr
[
i
].
longlong_arg
=
va_arg
(
ap
,
int
);
else
args_arr
[
i
].
longlong_arg
=
va_arg
(
ap
,
uint
);
...
...
@@ -458,6 +459,7 @@ static char *process_args(CHARSET_INFO *cs, char *to, char *end,
break
;
}
case
'd'
:
case
'i'
:
case
'u'
:
case
'x'
:
case
'X'
:
...
...
@@ -472,7 +474,7 @@ static char *process_args(CHARSET_INFO *cs, char *to, char *end,
if
(
args_arr
[
print_arr
[
i
].
arg_idx
].
have_longlong
)
larg
=
args_arr
[
print_arr
[
i
].
arg_idx
].
longlong_arg
;
else
if
(
print_arr
[
i
].
arg_type
==
'd'
)
else
if
(
print_arr
[
i
].
arg_type
==
'd'
||
print_arr
[
i
].
arg_type
==
'i'
)
larg
=
(
int
)
args_arr
[
print_arr
[
i
].
arg_idx
].
longlong_arg
;
else
larg
=
(
uint
)
args_arr
[
print_arr
[
i
].
arg_idx
].
longlong_arg
;
...
...
@@ -615,8 +617,8 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
to
=
process_dbl_arg
(
to
,
end
,
width
,
d
,
*
fmt
);
continue
;
}
else
if
(
*
fmt
==
'd'
||
*
fmt
==
'
u'
||
*
fmt
==
'x'
||
*
fmt
==
'X'
||
*
fmt
==
'p'
||
*
fmt
==
'o'
)
else
if
(
*
fmt
==
'd'
||
*
fmt
==
'
i'
||
*
fmt
==
'u'
||
*
fmt
==
'x'
||
*
fmt
==
'
X'
||
*
fmt
==
'
p'
||
*
fmt
==
'o'
)
{
/* Integer parameter */
longlong
larg
;
...
...
@@ -625,7 +627,7 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
if
(
have_longlong
)
larg
=
va_arg
(
ap
,
longlong
);
else
if
(
*
fmt
==
'd'
)
else
if
(
*
fmt
==
'd'
||
*
fmt
==
'i'
)
larg
=
va_arg
(
ap
,
int
);
else
larg
=
va_arg
(
ap
,
uint
);
...
...
unittest/mysys/my_vsnprintf-t.c
View file @
9a49d2d4
...
...
@@ -31,7 +31,7 @@ void test1(const char *res, const char *fmt, ...)
int
main
(
void
)
{
plan
(
5
4
);
plan
(
5
8
);
test1
(
"Constant string"
,
"Constant string"
);
...
...
@@ -44,6 +44,8 @@ int main(void)
"Format specifier c %c"
,
'!'
);
test1
(
"Format specifier d 1"
,
"Format specifier d %d"
,
1
);
test1
(
"Format specifier i 1"
,
"Format specifier i %i"
,
1
);
test1
(
"Format specifier u 2"
,
"Format specifier u %u"
,
2
);
test1
(
"Format specifier o 375"
,
...
...
@@ -77,6 +79,9 @@ int main(void)
test1
(
"Length modifiers work: 1 * -1 * 2 * 3"
,
"Length modifiers work: %d * %ld * %lld * %zd"
,
1
,
-
1L
,
2LL
,
(
size_t
)
3
);
test1
(
"Length modifiers work: 1 * -1 * 2 * 3"
,
"Length modifiers work: %i * %li * %lli * %zd"
,
1
,
-
1L
,
2LL
,
(
size_t
)
3
);
test1
(
"long long X: 123456789abcdef0"
,
"long long X: %llx"
,
0x123456789abcdef0LL
);
...
...
@@ -121,6 +126,10 @@ int main(void)
"Hello int, %d"
,
1
);
test1
(
"Hello int, -1"
,
"Hello int, %d"
,
-
1
);
test1
(
"Hello int, 1"
,
"Hello int, %i"
,
1
);
test1
(
"Hello int, -1"
,
"Hello int, %i"
,
-
1
);
test1
(
"Hello string 'I am a string'"
,
"Hello string '%s'"
,
"I am a string"
);
test1
(
"Hello hack hack hack hack hack hack hack 1"
,
...
...
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