1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

Fix for BUG#2045 "Sending SIGHUP to mysqld crashes it if running with --log-bin".

The constructor of Rotate_log_event used when we are rotating our binlog or
relay log, should not assume that there is a nonzero THD available.
For example, when we are reacting to SIGHUP, the THD is 0.
In fact we don't need to use the THD in this constructor;
we can do like for Stop_log_event, and use the minimal Log_event
constructor.
If we were allowed to put Unix-specific commands in the testsuite,
I'd add a test for this (<sigh>).
This commit is contained in:
guilhem@mysql.com
2003-12-08 16:18:25 +01:00
parent c87747c39c
commit dba12258b9
3 changed files with 9 additions and 4 deletions

View File

@ -843,7 +843,7 @@ void MYSQL_LOG::new_file(bool need_lock)
We log the whole file name for log file as the user may decide We log the whole file name for log file as the user may decide
to change base names at some point. to change base names at some point.
*/ */
THD* thd = current_thd; THD* thd = current_thd; /* may be 0 if we are reacting to SIGHUP */
Rotate_log_event r(thd,new_name+dirname_length(new_name)); Rotate_log_event r(thd,new_name+dirname_length(new_name));
r.set_log_pos(this); r.set_log_pos(this);
@ -852,7 +852,7 @@ void MYSQL_LOG::new_file(bool need_lock)
the slave running with log-bin, we set the flag on rotate the slave running with log-bin, we set the flag on rotate
event to prevent infinite log rotation loop event to prevent infinite log rotation loop
*/ */
if (thd->slave_thread) if (thd && thd->slave_thread)
r.flags|= LOG_EVENT_FORCED_ROTATE_F; r.flags|= LOG_EVENT_FORCED_ROTATE_F;
r.write(&log_file); r.write(&log_file);
bytes_written += r.get_event_len(); bytes_written += r.get_event_len();

View File

@ -128,7 +128,12 @@ Log_event::Log_event(THD* thd_arg, uint16 flags_arg, bool using_trans)
(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))); (thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)));
} }
/*
This minimal constructor is for when you are not even sure that there is a
valid THD. For example in the server when we are shutting down or flushing
logs after receiving a SIGHUP (then we must write a Rotate to the binlog but
we have no THD, so we need this minimal constructor).
*/
Log_event::Log_event() Log_event::Log_event()
:temp_buf(0), exec_time(0), cached_event_len(0), flags(0), cache_stmt(0), :temp_buf(0), exec_time(0), cached_event_len(0), flags(0), cache_stmt(0),
thd(0) thd(0)

View File

@ -607,7 +607,7 @@ public:
Rotate_log_event(THD* thd_arg, const char* new_log_ident_arg, Rotate_log_event(THD* thd_arg, const char* new_log_ident_arg,
uint ident_len_arg = 0, uint ident_len_arg = 0,
ulonglong pos_arg = LOG_EVENT_OFFSET) ulonglong pos_arg = LOG_EVENT_OFFSET)
:Log_event(thd_arg,0,0), new_log_ident(new_log_ident_arg), :Log_event(), new_log_ident(new_log_ident_arg),
pos(pos_arg),ident_len(ident_len_arg ? ident_len_arg : pos(pos_arg),ident_len(ident_len_arg ? ident_len_arg :
(uint) strlen(new_log_ident_arg)), alloced(0) (uint) strlen(new_log_ident_arg)), alloced(0)
{} {}