From 283e9529fc7465d3be11e2bd21043da8a7e61c24 Mon Sep 17 00:00:00 2001 From: "jani@a88-113-38-195.elisa-laajakaista.fi" <> Date: Wed, 8 Aug 2007 16:50:43 +0300 Subject: [PATCH] BUG#30274 (Debug server crashes because mutex isn't initialized): Completion patch, since it is possible that Log_event::write_header() is called with no current thread. When starting the server, there is no thread available, but MYSQL_BIN_LOG::open() is called to initialize the binary log. The function writes a format description log event to the binary log, which means that Log_event::write_header() can be called with no current thread object available. --- sql/log_event.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index ef41443d173..e3b47f35162 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -691,9 +691,19 @@ bool Log_event::write_header(IO_CACHE* file, ulong event_data_length) log_pos= my_b_safe_tell(file)+data_written; } - /* Set time of we this isn't a query */ + /* + Set time of when to when the query started. Since this function is + called from init_server_components() as well, it might be that the + current thread is not defined. In that case, we take the current + time instead. It is safe to call my_time() here since the first + time this line is reached is through the init_server_components() + call, which is after the my_init() call in the main() function (or + it's replacement, for some platforms). + */ + THD *thd= current_thd; if (!when) - when= current_thd->start_time; + when= thd ? thd->start_time : my_time(0); + /* Header will be of size LOG_EVENT_HEADER_LEN for all events, except for FORMAT_DESCRIPTION_EVENT and ROTATE_EVENT, where it will be