diff options
Diffstat (limited to 'sql/rpl_parallel.cc')
-rw-r--r-- | sql/rpl_parallel.cc | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc index b4e7b1a89dd..acdedd6e0a0 100644 --- a/sql/rpl_parallel.cc +++ b/sql/rpl_parallel.cc @@ -705,7 +705,7 @@ do_retry: thd->clear_error(); /* - If we retry due to a deadlock kill that occured during the commit step, we + If we retry due to a deadlock kill that occurred during the commit step, we might have already updated (but not committed) an update of table mysql.gtid_slave_pos, and cleared the gtid_pending flag. Now we have rolled back any such update, so we must set the gtid_pending flag back to @@ -969,10 +969,8 @@ handle_rpl_parallel_thread(void *arg) my_thread_init(); thd = new THD; thd->thread_stack = (char*)&thd; - mysql_mutex_lock(&LOCK_thread_count); - thd->thread_id= thd->variables.pseudo_thread_id= thread_id++; - threads.append(thd); - mysql_mutex_unlock(&LOCK_thread_count); + thd->thread_id= thd->variables.pseudo_thread_id= next_thread_id(); + add_to_active_threads(thd); set_current_thd(thd); pthread_detach_this_thread(); thd->init_for_queries(); @@ -1128,7 +1126,7 @@ handle_rpl_parallel_thread(void *arg) /* Register ourself to wait for the previous commit, if we need to do such registration _and_ that previous commit has not already - occured. + occurred. */ register_wait_for_prior_event_group_commit(rgi, entry); @@ -1189,7 +1187,7 @@ handle_rpl_parallel_thread(void *arg) { /* Do an extra check for (deadlock) kill here. This helps prevent a - lingering deadlock kill that occured during normal DML processing to + lingering deadlock kill that occurred during normal DML processing to propagate past the mark_start_commit(). If we detect a deadlock only after mark_start_commit(), we have to unmark, which has at least a theoretical possibility of leaving a window where it looks like all @@ -1372,10 +1370,10 @@ handle_rpl_parallel_thread(void *arg) thd->reset_db(NULL, 0); thd_proc_info(thd, "Slave worker thread exiting"); thd->temporary_tables= 0; - mysql_mutex_lock(&LOCK_thread_count); + THD_CHECK_SENTRY(thd); + unlink_not_visible_thd(thd); delete thd; - mysql_mutex_unlock(&LOCK_thread_count); mysql_mutex_lock(&rpt->LOCK_rpl_thread); rpt->running= false; |