mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug#47525: MySQL crashed (Federated)
On Mac OS X or Windows, sending a SIGHUP to the server or a asynchronous flush (triggered by flush_time), would cause the server to crash. The problem was that a hook used to detach client API handles wasn't prepared to handle cases where the thread does not have a associated session. The solution is to verify whether the thread has a associated session before trying to detach a handle.
This commit is contained in:
@ -2161,6 +2161,26 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
if (check_global_access(thd,RELOAD_ACL))
|
||||
break;
|
||||
mysql_log.write(thd,command,NullS);
|
||||
#ifndef DBUG_OFF
|
||||
DBUG_EXECUTE_IF("simulate_detached_thread_refresh",
|
||||
{
|
||||
/*
|
||||
Simulate a reload without a attached thread session.
|
||||
Provides a environment similar to that of when the
|
||||
server receives a SIGHUP signal and reloads caches
|
||||
and flushes tables.
|
||||
*/
|
||||
bool res;
|
||||
my_pthread_setspecific_ptr(THR_THD, NULL);
|
||||
res= reload_acl_and_cache(NULL, options | REFRESH_FAST,
|
||||
NULL, ¬_used);
|
||||
my_pthread_setspecific_ptr(THR_THD, thd);
|
||||
if (!res)
|
||||
send_ok(thd);
|
||||
break;
|
||||
}
|
||||
);
|
||||
#endif
|
||||
if (!reload_acl_and_cache(thd, options, (TABLE_LIST*) 0, ¬_used))
|
||||
send_ok(thd);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user