mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01: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:
parent
c87747c39c
commit
dba12258b9
3 changed files with 9 additions and 4 deletions
|
@ -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
|
||||
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));
|
||||
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
|
||||
event to prevent infinite log rotation loop
|
||||
*/
|
||||
if (thd->slave_thread)
|
||||
if (thd && thd->slave_thread)
|
||||
r.flags|= LOG_EVENT_FORCED_ROTATE_F;
|
||||
r.write(&log_file);
|
||||
bytes_written += r.get_event_len();
|
||||
|
|
|
@ -128,7 +128,12 @@ Log_event::Log_event(THD* thd_arg, uint16 flags_arg, bool using_trans)
|
|||
(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()
|
||||
:temp_buf(0), exec_time(0), cached_event_len(0), flags(0), cache_stmt(0),
|
||||
thd(0)
|
||||
|
|
|
@ -607,7 +607,7 @@ public:
|
|||
Rotate_log_event(THD* thd_arg, const char* new_log_ident_arg,
|
||||
uint ident_len_arg = 0,
|
||||
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 :
|
||||
(uint) strlen(new_log_ident_arg)), alloced(0)
|
||||
{}
|
||||
|
|
Loading…
Reference in a new issue