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.
This commit is contained in:
parent
42e3c5d13c
commit
658340319b
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user