Commit dcf98760 authored by unknown's avatar unknown
Browse files

check for mysql_bin_log.is_open() before my_b_tell(&thd->transaction.trans_log

in ha_commit_trans - why it didn't crash earlier ?


mysql-test/r/null.result:
  after merge fix
parent 6f6f7ba9
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -156,3 +156,22 @@ drop table t1;
select cast(NULL as signed);
cast(NULL as signed)
NULL
create table t1(i int, key(i));
insert into t1 values(1);
insert into t1 select i*2 from t1;
insert into t1 select i*2 from t1;
insert into t1 select i*2 from t1;
insert into t1 select i*2 from t1;
insert into t1 select i*2 from t1;
insert into t1 select i*2 from t1;
insert into t1 select i*2 from t1;
insert into t1 select i*2 from t1;
insert into t1 select i*2 from t1;
explain select * from t1 where i=2 or i is null;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ref_or_null	i	i	5	const	10	Using where; Using index
alter table t1 change i i int not null;
explain select * from t1 where i=2 or i is null;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ref	i	i	4	const	7	Using where; Using index
drop table t1;
+11 −11
Original line number Diff line number Diff line
@@ -472,7 +472,7 @@ int ha_release_temporary_latches(THD *thd)
int ha_commit_trans(THD *thd, THD_TRANS* trans)
{
  int error=0;
  DBUG_ENTER("ha_commit");
  DBUG_ENTER("ha_commit_trans");
#ifdef USING_TRANSACTIONS
  if (opt_using_transactions)
  {
@@ -480,7 +480,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans)
    bool operation_done= 0, need_start_waiters= 0;

    /* If transaction has done some updates to tables */
    if (trans == &thd->transaction.all &&
    if (trans == &thd->transaction.all && mysql_bin_log.is_open() &&
        my_b_tell(&thd->transaction.trans_log))
    {
      if (error= wait_if_global_read_lock(thd, 0, 0))
@@ -576,7 +576,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans)
int ha_rollback_trans(THD *thd, THD_TRANS *trans)
{
  int error=0;
  DBUG_ENTER("ha_rollback");
  DBUG_ENTER("ha_rollback_trans");
#ifdef USING_TRANSACTIONS
  if (opt_using_transactions)
  {
@@ -868,7 +868,7 @@ my_off_t ha_get_ptr(byte *ptr, uint pack_length)
int handler::ha_open(const char *name, int mode, int test_if_locked)
{
  int error;
  DBUG_ENTER("handler::open");
  DBUG_ENTER("handler::ha_open");
  DBUG_PRINT("enter",("name: %s  db_type: %d  db_stat: %d  mode: %d  lock_test: %d",
		      name, table->db_type, table->db_stat, mode,
		      test_if_locked));
@@ -967,7 +967,7 @@ void handler::update_auto_increment()
{
  longlong nr;
  THD *thd;
  DBUG_ENTER("update_auto_increment");
  DBUG_ENTER("handler::update_auto_increment");
  if (table->next_number_field->val_int() != 0 ||
      table->auto_increment_field_not_null &&
      current_thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO)
@@ -1025,7 +1025,7 @@ longlong handler::get_auto_increment()

void handler::print_error(int error, myf errflag)
{
  DBUG_ENTER("print_error");
  DBUG_ENTER("handler::print_error");
  DBUG_PRINT("enter",("error: %d",error));

  int textno=ER_GET_ERRNO;
@@ -1164,7 +1164,7 @@ bool handler::get_error_message(int error, String* buf)

uint handler::get_dup_key(int error)
{
  DBUG_ENTER("get_dup_key");
  DBUG_ENTER("handler::get_dup_key");
  table->file->errkey  = (uint) -1;
  if (error == HA_ERR_FOUND_DUPP_KEY || error == HA_ERR_FOUND_DUPP_UNIQUE)
    info(HA_STATUS_ERRKEY | HA_STATUS_NO_LOCK);