diff options
author | petr@mysql.com <> | 2006-04-18 08:43:13 +0400 |
---|---|---|
committer | petr@mysql.com <> | 2006-04-18 08:43:13 +0400 |
commit | de97f94a49ce139b630b344c39958ea3b92ceeea (patch) | |
tree | aa6ed243963a36ea2e42b26bf13d5e056b2099df /sql | |
parent | ac6ae8f1f54e2b0fbcd30d8bd0f4a02bb6651b1e (diff) | |
download | mariadb-git-de97f94a49ce139b630b344c39958ea3b92ceeea.tar.gz |
fix for Bug#18848 "SIGHUP crashes the server" (v2)
Diffstat (limited to 'sql')
-rw-r--r-- | sql/log.cc | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/sql/log.cc b/sql/log.cc index 3f6e3108a0b..818abe89e02 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -676,20 +676,36 @@ bool LOGGER::flush_logs(THD *thd) /* reopen log files */ file_log_handler->flush(); - /* - this will lock and wait for all but the logger thread to release the - tables. Then we could reopen log tables. Then release the name locks. - */ - lock_and_wait_for_table_name(thd, &close_slow_log); - lock_and_wait_for_table_name(thd, &close_general_log); + /* flush tables, in the case they are enabled */ + if (logger.is_log_tables_initialized) + { + /* + This will lock and wait for all but the logger thread to release the + tables. Then we could reopen log tables. Then release the name locks. + + NOTE: in fact, the first parameter used in lock_and_wait_for_table_name() + and table_log_handler->flush() could be any non-NULL THD, as the + underlying code makes certain assumptions about this. + Here we use one of the logger handler THD's. Simply because it + seems appropriate. + */ + lock_and_wait_for_table_name(table_log_handler->general_log_thd, + &close_slow_log); + lock_and_wait_for_table_name(table_log_handler->general_log_thd, + &close_general_log); - /* deny others from logging to general and slow log, while reopening tables */ - logger.lock(); + /* + Deny others from logging to general and slow log, + while reopening tables. + */ + logger.lock(); - table_log_handler->flush(thd, &close_slow_log, &close_general_log); + table_log_handler->flush(table_log_handler->general_log_thd, + &close_slow_log, &close_general_log); - /* end of log tables flush */ - logger.unlock(); + /* end of log tables flush */ + logger.unlock(); + } return FALSE; } |