Commit 7061f203 authored by Magne Mahre's avatar Magne Mahre

Bug#11858960 - WINDOWS SERVICE FAILING TO START IMMEDIATELY AFTER

               INSTALLATION

When starting mysqld as an MS Windows NT service, it crashed 
with "Error 1067: The process terminated unexpectedly".

The problem is that thread local variables are not allocated
and initialized properly when started as a service. When the
server is started as a regular executable, the problem does
not occur.

Analysis showed that this is a regression after the patch for 
Bug#11765237/Bug#11763065.   Before, the thread local storage
was initialized by the call chain:
win_main->my_basic_init->my_thread_basic_global_init->
my_thread_init

When the my_init() structure was changed, this initialization
was moved from win_main to mysqld_main.   When started as
a service win_main is run in a separate thread, which does
not have mysqld_main in its call path, so my_thread_init
is never called for this thread.

Added a call to my_thread_init / my_thread_end in the service
handler function, which solves the problem.
parent df7d2b91
...@@ -4656,10 +4656,15 @@ int mysqld_main(int argc, char **argv) ...@@ -4656,10 +4656,15 @@ int mysqld_main(int argc, char **argv)
#if defined(__WIN__) && !defined(EMBEDDED_LIBRARY) #if defined(__WIN__) && !defined(EMBEDDED_LIBRARY)
int mysql_service(void *p) int mysql_service(void *p)
{ {
if (my_thread_init())
return 1;
if (use_opt_args) if (use_opt_args)
win_main(opt_argc, opt_argv); win_main(opt_argc, opt_argv);
else else
win_main(Service.my_argc, Service.my_argv); win_main(Service.my_argc, Service.my_argv);
my_thread_end();
return 0; return 0;
} }
......
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