• Andrei Elkin's avatar
    MDEV-9510 Segmentation fault in binlog thread causes crash · c7e38076
    Andrei Elkin authored
    With combination of --log-bin and Galera the server may crash
    reporting two characteristic stacks:
    
      /usr/sbin/mysqld(_ZN13MYSQL_BIN_LOG13mark_xid_doneEmb+0xc7)[0x7f182a8e2cb7]
      /usr/sbin/mysqld(binlog_background_thread+0x2b5)[0x7f182a8e3275]
    
    or
    
      /usr/sbin/mysqld(_ZN13MYSQL_BIN_LOG21do_checkpoint_requestEm+0x9d)[0x7ff395b2dafd]
      /usr/sbin/mysqld(_ZN13MYSQL_BIN_LOG20checkpoint_and_purgeEm+0x11)[0x7ff395b2db91]
      /usr/sbin/mysqld(_ZN13MYSQL_BIN_LOG16rotate_and_purgeEb+0xc2)[0x7ff395b300b2]
    
    The reason of the failure appears to be non-matching decrements for
      `xid_count_per_binlog::xid_count`
    which can occur when a transaction is executed having its connection issued
    `SET @@sql_log_bin=0`. In such case the xid count is not incremented but
    its decrements still runs to turn `binlog_xid_count_list` into improper state
    which the following FLUSH BINARY LOGS exposes through the crash.
    
    *Note_1*: the regression test reuses an existing galera.sql_log_bin
    which does not run stably (even in its base form) by mtr with --log-bin.
    
    *Note_2*: 10.0-galera branch is free of this issue having missed MDEV-7205
    fixes.
    c7e38076
log.cc 312 KB