From d050c30d422a81331ba3795bb48f2f1f9daaf317 Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Mon, 5 Aug 2002 13:09:12 +0300 Subject: [PATCH] Added some mutex locks to make SLAVE START and SLAVE STOP thread safe. --- Docs/manual.texi | 2 ++ sql/gen_lex_hash.cc | 12 +++++++++--- sql/slave.cc | 4 ++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Docs/manual.texi b/Docs/manual.texi index 11140681ce..b4d39667ec 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -46928,6 +46928,8 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.52 @itemize @bullet @item +Fixed thread bug in @code{SLAVE START} and @code{SLAVE STOP}. +@item Added name of 'administrator command' logs. @item Fixed bug with creating an auto-increment value on second part of a diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc index d47019ee04..22e40ff283 100644 --- a/sql/gen_lex_hash.cc +++ b/sql/gen_lex_hash.cc @@ -216,7 +216,7 @@ you have to change 'main' to print out the new function\n"); return(1); } - if (opt_verbose) + if (opt_verbose > 1) fprintf (stderr,"Info: Possible add values: %d\n",found-type_count); for (prime=primes; (function_mod=*prime) ; prime++) @@ -385,7 +385,7 @@ static int get_options(int argc, char **argv) opt_search=1; break; case 'v': - opt_verbose=1; + opt_verbose++; break; case 'V': usage(1); exit(0); case 'I': @@ -481,7 +481,7 @@ int main(int argc,char **argv) int error; MY_INIT(argv[0]); - start_value=7740512L; best_t1=7953583L; best_t2=6918639L; best_type=1; /* mode=5449 add=1 type: 0 */ + start_value=2744811L; best_t1=5135075L; best_t2=1719450L; best_type=0; /* mode=4999 add=1 type: 0 */ if (get_options(argc,(char **) argv)) exit(1); @@ -502,6 +502,7 @@ int main(int argc,char **argv) start_value, best_t1,best_t2,best_type,best_mod,best_add, best_functype); + best_start_value=start_value; for (uint i=1 ; i <= opt_count ; i++) { if (i % 10 == 0) @@ -524,6 +525,11 @@ int main(int argc,char **argv) best_start_value,best_t1,best_t2,best_type,best_mod,best_add, best_functype); } + if (opt_verbose && (i % 20000) == 0) + printf("\nstart_value=%ldL; best_t1=%ldL; best_t2=%ldL; best_type=%d; +/* mode=%d add=%d type: %d */\n", + best_start_value,best_t1,best_t2,best_type,best_mod,best_add, + best_functype); } } diff --git a/sql/slave.cc b/sql/slave.cc index adbf3c106c..6b79c56748 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1301,7 +1301,9 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) } thd->thread_stack = (char*)&thd; // remember where our stack is thd->temporary_tables = save_temporary_tables; // restore temp tables + (void) pthread_mutex_lock(&LOCK_thread_count); threads.append(thd); + (void) pthread_mutex_unlock(&LOCK_thread_count); glob_mi.pending = 0; //this should always be set to 0 when the slave thread // is started @@ -1501,7 +1503,9 @@ position %s", pthread_mutex_unlock(&LOCK_slave); net_end(&thd->net); // destructor will not free it, because we are weird slave_thd = 0; + (void) pthread_mutex_lock(&LOCK_thread_count); delete thd; + (void) pthread_mutex_unlock(&LOCK_thread_count); my_thread_end(); #ifndef DBUG_OFF if(abort_slave_event_count && !events_till_abort) -- 2.30.9