Commit d050c30d authored by monty@mashka.mysql.fi's avatar monty@mashka.mysql.fi

Added some mutex locks to make SLAVE START and SLAVE STOP thread safe.

parent 4f56ed82
...@@ -46928,6 +46928,8 @@ not yet 100% confident in this code. ...@@ -46928,6 +46928,8 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.52 @appendixsubsec Changes in release 3.23.52
@itemize @bullet @itemize @bullet
@item @item
Fixed thread bug in @code{SLAVE START} and @code{SLAVE STOP}.
@item
Added name of 'administrator command' logs. Added name of 'administrator command' logs.
@item @item
Fixed bug with creating an auto-increment value on second part of a Fixed bug with creating an auto-increment value on second part of a
...@@ -216,7 +216,7 @@ you have to change 'main' to print out the new function\n"); ...@@ -216,7 +216,7 @@ you have to change 'main' to print out the new function\n");
return(1); return(1);
} }
if (opt_verbose) if (opt_verbose > 1)
fprintf (stderr,"Info: Possible add values: %d\n",found-type_count); fprintf (stderr,"Info: Possible add values: %d\n",found-type_count);
for (prime=primes; (function_mod=*prime) ; prime++) for (prime=primes; (function_mod=*prime) ; prime++)
...@@ -385,7 +385,7 @@ static int get_options(int argc, char **argv) ...@@ -385,7 +385,7 @@ static int get_options(int argc, char **argv)
opt_search=1; opt_search=1;
break; break;
case 'v': case 'v':
opt_verbose=1; opt_verbose++;
break; break;
case 'V': usage(1); exit(0); case 'V': usage(1); exit(0);
case 'I': case 'I':
...@@ -481,7 +481,7 @@ int main(int argc,char **argv) ...@@ -481,7 +481,7 @@ int main(int argc,char **argv)
int error; int error;
MY_INIT(argv[0]); 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)) if (get_options(argc,(char **) argv))
exit(1); exit(1);
...@@ -502,6 +502,7 @@ int main(int argc,char **argv) ...@@ -502,6 +502,7 @@ int main(int argc,char **argv)
start_value, best_t1,best_t2,best_type,best_mod,best_add, start_value, best_t1,best_t2,best_type,best_mod,best_add,
best_functype); best_functype);
best_start_value=start_value;
for (uint i=1 ; i <= opt_count ; i++) for (uint i=1 ; i <= opt_count ; i++)
{ {
if (i % 10 == 0) if (i % 10 == 0)
...@@ -524,6 +525,11 @@ int main(int argc,char **argv) ...@@ -524,6 +525,11 @@ int main(int argc,char **argv)
best_start_value,best_t1,best_t2,best_type,best_mod,best_add, best_start_value,best_t1,best_t2,best_type,best_mod,best_add,
best_functype); 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);
} }
} }
......
...@@ -1301,7 +1301,9 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) ...@@ -1301,7 +1301,9 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused)))
} }
thd->thread_stack = (char*)&thd; // remember where our stack is thd->thread_stack = (char*)&thd; // remember where our stack is
thd->temporary_tables = save_temporary_tables; // restore temp tables thd->temporary_tables = save_temporary_tables; // restore temp tables
(void) pthread_mutex_lock(&LOCK_thread_count);
threads.append(thd); 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 glob_mi.pending = 0; //this should always be set to 0 when the slave thread
// is started // is started
...@@ -1501,7 +1503,9 @@ position %s", ...@@ -1501,7 +1503,9 @@ position %s",
pthread_mutex_unlock(&LOCK_slave); pthread_mutex_unlock(&LOCK_slave);
net_end(&thd->net); // destructor will not free it, because we are weird net_end(&thd->net); // destructor will not free it, because we are weird
slave_thd = 0; slave_thd = 0;
(void) pthread_mutex_lock(&LOCK_thread_count);
delete thd; delete thd;
(void) pthread_mutex_unlock(&LOCK_thread_count);
my_thread_end(); my_thread_end();
#ifndef DBUG_OFF #ifndef DBUG_OFF
if(abort_slave_event_count && !events_till_abort) if(abort_slave_event_count && !events_till_abort)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment