mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Fixing problems of previous 5.1-main->5.1-maria merge:
- adding back Serg's "mtr --list-options" - safe_mutex deadlock detector started raising wrong deadlock warnings, fixed here by a backport from 6.0-main. include/my_pthread.h: Porting changes done to 6.0-main which satisfy the safe_mutex deadlock detector (those in 5.1-main don't), see chad@mysql.com-20090126155607-n0j3zbmgbfepnmmo for explanations mysql-test/mysql-test-run.pl: adding back Serg's --list-options mysys/my_init.c: Porting changes done to 6.0-main which satisfy the safe_mutex deadlock detector (those in 5.1-main don't), see chad@mysql.com-20090126155607-n0j3zbmgbfepnmmo for explanations mysys/my_thr_init.c: Porting changes done to 6.0-main which satisfy the safe_mutex deadlock detector (those in 5.1-main don't), see chad@mysql.com-20090126155607-n0j3zbmgbfepnmmo for explanations
This commit is contained in:
@@ -671,6 +671,7 @@ extern pthread_mutexattr_t my_errorcheck_mutexattr;
|
|||||||
|
|
||||||
typedef ulong my_thread_id;
|
typedef ulong my_thread_id;
|
||||||
|
|
||||||
|
extern void my_threadattr_global_init(void);
|
||||||
extern my_bool my_thread_global_init(void);
|
extern my_bool my_thread_global_init(void);
|
||||||
extern void my_thread_global_end(void);
|
extern void my_thread_global_end(void);
|
||||||
extern my_bool my_thread_init(void);
|
extern my_bool my_thread_init(void);
|
||||||
|
@@ -118,6 +118,7 @@ our $opt_vs_config = $ENV{'MTR_VS_CONFIG'};
|
|||||||
my $DEFAULT_SUITES= "main,binlog,federated,rpl,rpl_ndb,ndb,maria";
|
my $DEFAULT_SUITES= "main,binlog,federated,rpl,rpl_ndb,ndb,maria";
|
||||||
|
|
||||||
our $opt_usage;
|
our $opt_usage;
|
||||||
|
our $opt_list_options;
|
||||||
our $opt_suites;
|
our $opt_suites;
|
||||||
our $opt_suites_default= "main,backup,backup_engines,binlog,rpl,rpl_ndb,ndb"; # Default suites to run
|
our $opt_suites_default= "main,backup,backup_engines,binlog,rpl,rpl_ndb,ndb"; # Default suites to run
|
||||||
our $opt_script_debug= 0; # Script debugging, enable with --script-debug
|
our $opt_script_debug= 0; # Script debugging, enable with --script-debug
|
||||||
@@ -770,7 +771,7 @@ sub command_line_setup {
|
|||||||
# Read the command line options
|
# Read the command line options
|
||||||
# Note: Keep list, and the order, in sync with usage at end of this file
|
# Note: Keep list, and the order, in sync with usage at end of this file
|
||||||
Getopt::Long::Configure("pass_through");
|
Getopt::Long::Configure("pass_through");
|
||||||
GetOptions(
|
my %options=(
|
||||||
# Control what engine/variation to run
|
# Control what engine/variation to run
|
||||||
'embedded-server' => \$opt_embedded_server,
|
'embedded-server' => \$opt_embedded_server,
|
||||||
'ps-protocol' => \$opt_ps_protocol,
|
'ps-protocol' => \$opt_ps_protocol,
|
||||||
@@ -891,9 +892,13 @@ sub command_line_setup {
|
|||||||
'timediff' => \&report_option,
|
'timediff' => \&report_option,
|
||||||
|
|
||||||
'help|h' => \$opt_usage,
|
'help|h' => \$opt_usage,
|
||||||
) or usage("Can't read options");
|
'list-options' => \$opt_list_options,
|
||||||
|
);
|
||||||
|
|
||||||
|
GetOptions(%options) or usage("Can't read options");
|
||||||
|
|
||||||
usage("") if $opt_usage;
|
usage("") if $opt_usage;
|
||||||
|
list_options(\%options) if $opt_list_options;
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Setup verbosity
|
# Setup verbosity
|
||||||
@@ -5125,3 +5130,15 @@ HERE
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub list_options ($) {
|
||||||
|
my $hash= shift;
|
||||||
|
|
||||||
|
for (keys %$hash) {
|
||||||
|
s/(=.*|!)$//;
|
||||||
|
s/\|/\n--/g;
|
||||||
|
print "--$_\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
@@ -82,20 +82,20 @@ my_bool my_init(void)
|
|||||||
my_progname_short= my_progname + dirname_length(my_progname);
|
my_progname_short= my_progname + dirname_length(my_progname);
|
||||||
|
|
||||||
#if defined(THREAD)
|
#if defined(THREAD)
|
||||||
if (my_thread_global_init())
|
(void) my_threadattr_global_init();
|
||||||
return 1;
|
|
||||||
# if defined(SAFE_MUTEX)
|
# if defined(SAFE_MUTEX)
|
||||||
safe_mutex_global_init(); /* Must be called early */
|
safe_mutex_global_init(); /* Must be called early */
|
||||||
# endif
|
# elif defined(MY_PTHREAD_FASTMUTEX)
|
||||||
#endif
|
|
||||||
#if defined(THREAD) && defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX)
|
|
||||||
fastmutex_global_init(); /* Must be called early */
|
fastmutex_global_init(); /* Must be called early */
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
netware_init();
|
netware_init();
|
||||||
#ifdef THREAD
|
#ifdef THREAD
|
||||||
#if defined(HAVE_PTHREAD_INIT)
|
#if defined(HAVE_PTHREAD_INIT)
|
||||||
pthread_init(); /* Must be called before DBUG_ENTER */
|
pthread_init(); /* Must be called before DBUG_ENTER */
|
||||||
#endif
|
#endif
|
||||||
|
if (my_thread_global_init())
|
||||||
|
return 1;
|
||||||
#if !defined( __WIN__) && !defined(__NETWARE__)
|
#if !defined( __WIN__) && !defined(__NETWARE__)
|
||||||
sigfillset(&my_signals); /* signals blocked by mf_brkhant */
|
sigfillset(&my_signals); /* signals blocked by mf_brkhant */
|
||||||
#endif
|
#endif
|
||||||
|
@@ -65,6 +65,38 @@ nptl_pthread_exit_hack_handler(void *arg __attribute((unused)))
|
|||||||
#endif /* TARGET_OS_LINUX */
|
#endif /* TARGET_OS_LINUX */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initialize thread attributes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void my_threadattr_global_init(void)
|
||||||
|
{
|
||||||
|
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
|
||||||
|
/*
|
||||||
|
Set mutex type to "fast" a.k.a "adaptive"
|
||||||
|
|
||||||
|
In this case the thread may steal the mutex from some other thread
|
||||||
|
that is waiting for the same mutex. This will save us some
|
||||||
|
context switches but may cause a thread to 'starve forever' while
|
||||||
|
waiting for the mutex (not likely if the code within the mutex is
|
||||||
|
short).
|
||||||
|
*/
|
||||||
|
pthread_mutexattr_init(&my_fast_mutexattr); /* ?= MY_MUTEX_INIT_FAST */
|
||||||
|
pthread_mutexattr_settype(&my_fast_mutexattr,
|
||||||
|
PTHREAD_MUTEX_ADAPTIVE_NP);
|
||||||
|
#endif
|
||||||
|
#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
|
||||||
|
/*
|
||||||
|
Set mutex type to "errorcheck"
|
||||||
|
*/
|
||||||
|
pthread_mutexattr_init(&my_errorcheck_mutexattr);
|
||||||
|
pthread_mutexattr_settype(&my_errorcheck_mutexattr,
|
||||||
|
PTHREAD_MUTEX_ERRORCHECK);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static uint get_thread_lib(void);
|
static uint get_thread_lib(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user