summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorpetr@mysql.com <>2006-04-18 08:43:13 +0400
committerpetr@mysql.com <>2006-04-18 08:43:13 +0400
commitde97f94a49ce139b630b344c39958ea3b92ceeea (patch)
treeaa6ed243963a36ea2e42b26bf13d5e056b2099df /sql
parentac6ae8f1f54e2b0fbcd30d8bd0f4a02bb6651b1e (diff)
downloadmariadb-git-de97f94a49ce139b630b344c39958ea3b92ceeea.tar.gz
fix for Bug#18848 "SIGHUP crashes the server" (v2)
Diffstat (limited to 'sql')
-rw-r--r--sql/log.cc38
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;
}