Commit 814dc467 authored by Monty's avatar Monty

Fixed slow bootstrap introduced in 10.6

The problem was that the signal thread was not killed when using
unireg_abort().

The bug was introduced by:
MDEV-30260: Slave crashed:reload_acl_and_cache during shutdown

Other things fixed:
- Don't produce memory leaks with safemalloc if all threads was not
  ended properly (not useful)
parent c1f3eff5
...@@ -153,7 +153,7 @@ char *guess_malloc_library(); ...@@ -153,7 +153,7 @@ char *guess_malloc_library();
void sf_report_leaked_memory(my_thread_id id); void sf_report_leaked_memory(my_thread_id id);
int sf_sanity(); int sf_sanity();
extern my_thread_id (*sf_malloc_dbug_id)(void); extern my_thread_id (*sf_malloc_dbug_id)(void);
#define SAFEMALLOC_REPORT_MEMORY(X) sf_report_leaked_memory(X) #define SAFEMALLOC_REPORT_MEMORY(X) if (!sf_leaking_memory) sf_report_leaked_memory(X)
#else #else
#define SAFEMALLOC_REPORT_MEMORY(X) do {} while(0) #define SAFEMALLOC_REPORT_MEMORY(X) do {} while(0)
#endif #endif
......
...@@ -220,7 +220,11 @@ void my_thread_global_end(void) ...@@ -220,7 +220,11 @@ void my_thread_global_end(void)
fprintf(stderr, fprintf(stderr,
"Error in my_thread_global_end(): %d threads didn't exit\n", "Error in my_thread_global_end(): %d threads didn't exit\n",
THR_thread_count); THR_thread_count);
#endif #endif /* HAVE_PTHREAD_KILL */
#ifdef SAFEMALLOC
/* We know we will have memoryleaks, suppress the leak report */
sf_leaking_memory= 1;
#endif /* SAFEMALLOC */
all_threads_killed= 0; all_threads_killed= 0;
break; break;
} }
...@@ -234,9 +238,7 @@ void my_thread_global_end(void) ...@@ -234,9 +238,7 @@ void my_thread_global_end(void)
that could use them. that could use them.
*/ */
if (all_threads_killed) if (all_threads_killed)
{
my_thread_destroy_internal_mutex(); my_thread_destroy_internal_mutex();
}
my_thread_global_init_done= 0; my_thread_global_init_done= 0;
} }
......
...@@ -1889,6 +1889,7 @@ extern "C" void unireg_abort(int exit_code) ...@@ -1889,6 +1889,7 @@ extern "C" void unireg_abort(int exit_code)
wsrep_sst_auth_free(); wsrep_sst_auth_free();
#endif // WITH_WSREP #endif // WITH_WSREP
wait_for_signal_thread_to_end();
clean_up(!opt_abort && (exit_code || !opt_bootstrap)); /* purecov: inspected */ clean_up(!opt_abort && (exit_code || !opt_bootstrap)); /* purecov: inspected */
DBUG_PRINT("quit",("done with cleanup in unireg_abort")); DBUG_PRINT("quit",("done with cleanup in unireg_abort"));
mysqld_exit(exit_code); mysqld_exit(exit_code);
......
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