Commit 600a6a67 authored by mats@romeo.(none)'s avatar mats@romeo.(none)

BUG#24403 (valgrind complaint on uninited st_table for innodb + rbr):

Removing DBUG_DUMP printouts for valgrind builds since they trigger warnings.
Removing valgrind memory checks completely.
Removing bzero() of record when opening table that was added earlier.
parent a8efaaee
...@@ -5417,7 +5417,13 @@ int Rows_log_event::do_add_row_data(byte *const row_data, ...@@ -5417,7 +5417,13 @@ int Rows_log_event::do_add_row_data(byte *const row_data,
DBUG_ENTER("Rows_log_event::do_add_row_data"); DBUG_ENTER("Rows_log_event::do_add_row_data");
DBUG_PRINT("enter", ("row_data: 0x%lx length: %lu", (ulong) row_data, DBUG_PRINT("enter", ("row_data: 0x%lx length: %lu", (ulong) row_data,
length)); length));
/*
Don't print debug messages when running valgrind since they can
trigger false warnings.
*/
#ifndef HAVE_purify
DBUG_DUMP("row_data", (const char*)row_data, min(length, 32)); DBUG_DUMP("row_data", (const char*)row_data, min(length, 32));
#endif
DBUG_ASSERT(m_rows_buf <= m_rows_cur); DBUG_ASSERT(m_rows_buf <= m_rows_cur);
DBUG_ASSERT(!m_rows_buf || m_rows_end && m_rows_buf < m_rows_end); DBUG_ASSERT(!m_rows_buf || m_rows_end && m_rows_buf < m_rows_end);
...@@ -5504,7 +5510,9 @@ unpack_row(RELAY_LOG_INFO *rli, ...@@ -5504,7 +5510,9 @@ unpack_row(RELAY_LOG_INFO *rli,
char const **row_end, ulong *master_reclength, char const **row_end, ulong *master_reclength,
MY_BITMAP* const rw_set, Log_event_type const event_type) MY_BITMAP* const rw_set, Log_event_type const event_type)
{ {
DBUG_ENTER("unpack_row");
DBUG_ASSERT(record && row); DBUG_ASSERT(record && row);
DBUG_PRINT("enter", ("row=0x%lx; record=0x%lx", row, record));
my_ptrdiff_t const offset= record - (byte*) table->record[0]; my_ptrdiff_t const offset= record - (byte*) table->record[0];
my_size_t master_null_bytes= table->s->null_bytes; my_size_t master_null_bytes= table->s->null_bytes;
...@@ -5548,6 +5556,8 @@ unpack_row(RELAY_LOG_INFO *rli, ...@@ -5548,6 +5556,8 @@ unpack_row(RELAY_LOG_INFO *rli,
DBUG_ASSERT(table->record[0] <= f->ptr); DBUG_ASSERT(table->record[0] <= f->ptr);
DBUG_ASSERT(f->ptr < table->record[0] + table->s->reclength + (f->pack_length_in_rec() == 0)); DBUG_ASSERT(f->ptr < table->record[0] + table->s->reclength + (f->pack_length_in_rec() == 0));
f->move_field_offset(offset); f->move_field_offset(offset);
DBUG_PRINT("info", ("unpacking column '%s' to 0x%lx", f->field_name, f->ptr));
ptr= f->unpack(f->ptr, ptr); ptr= f->unpack(f->ptr, ptr);
f->move_field_offset(-offset); f->move_field_offset(-offset);
/* Field...::unpack() cannot return 0 */ /* Field...::unpack() cannot return 0 */
...@@ -5595,7 +5605,7 @@ unpack_row(RELAY_LOG_INFO *rli, ...@@ -5595,7 +5605,7 @@ unpack_row(RELAY_LOG_INFO *rli,
(*field_ptr)->set_default(); (*field_ptr)->set_default();
} }
return error; DBUG_RETURN(error);
} }
int Rows_log_event::exec_event(st_relay_log_info *rli) int Rows_log_event::exec_event(st_relay_log_info *rli)
...@@ -6060,7 +6070,13 @@ Table_map_log_event::Table_map_log_event(const char *buf, uint event_len, ...@@ -6060,7 +6070,13 @@ Table_map_log_event::Table_map_log_event(const char *buf, uint event_len,
DBUG_PRINT("info",("event_len=%ld, common_header_len=%d, post_header_len=%d", DBUG_PRINT("info",("event_len=%ld, common_header_len=%d, post_header_len=%d",
event_len, common_header_len, post_header_len)); event_len, common_header_len, post_header_len));
/*
Don't print debug messages when running valgrind since they can
trigger false warnings.
*/
#ifndef HAVE_purify
DBUG_DUMP("event buffer", buf, event_len); DBUG_DUMP("event buffer", buf, event_len);
#endif
/* Read the post-header */ /* Read the post-header */
const char *post_start= buf + common_header_len; const char *post_start= buf + common_header_len;
...@@ -6784,6 +6800,17 @@ static int find_and_fetch_row(TABLE *table, byte *key) ...@@ -6784,6 +6800,17 @@ static int find_and_fetch_row(TABLE *table, byte *key)
row reference using the position() member function (it will be row reference using the position() member function (it will be
stored in table->file->ref) and the use rnd_pos() to position stored in table->file->ref) and the use rnd_pos() to position
the "cursor" (i.e., record[0] in this case) at the correct row. the "cursor" (i.e., record[0] in this case) at the correct row.
TODO: Add a check that the correct record has been fetched by
comparing with the original record. Take into account that the
record on the master and slave can be of different
length. Something along these lines should work:
ADD>>> store_record(table,record[1]);
int error= table->file->rnd_pos(table->record[0], table->file->ref);
ADD>>> DBUG_ASSERT(memcmp(table->record[1], table->record[0],
table->s->reclength) == 0);
*/ */
table->file->position(table->record[0]); table->file->position(table->record[0]);
int error= table->file->rnd_pos(table->record[0], table->file->ref); int error= table->file->rnd_pos(table->record[0], table->file->ref);
...@@ -6792,15 +6819,9 @@ static int find_and_fetch_row(TABLE *table, byte *key) ...@@ -6792,15 +6819,9 @@ static int find_and_fetch_row(TABLE *table, byte *key)
move it to table->record[1]. move it to table->record[1].
*/ */
bmove_align(table->record[1], table->record[0], table->s->reclength); bmove_align(table->record[1], table->record[0], table->s->reclength);
#ifdef HAVE_purify
if (error == 0)
valgrind_check_mem(table->record[1], table->s->reclength);
#endif
DBUG_RETURN(error); DBUG_RETURN(error);
} }
DBUG_ASSERT(table->record[1]);
/* We need to retrieve all fields */ /* We need to retrieve all fields */
/* TODO: Move this out from this function to main loop */ /* TODO: Move this out from this function to main loop */
table->use_all_columns(); table->use_all_columns();
...@@ -6812,6 +6833,15 @@ static int find_and_fetch_row(TABLE *table, byte *key) ...@@ -6812,6 +6833,15 @@ static int find_and_fetch_row(TABLE *table, byte *key)
if (!table->file->inited && (error= table->file->ha_index_init(0, FALSE))) if (!table->file->inited && (error= table->file->ha_index_init(0, FALSE)))
DBUG_RETURN(error); DBUG_RETURN(error);
/*
Don't print debug messages when running valgrind since they can
trigger false warnings.
*/
#ifndef HAVE_purify
DBUG_DUMP("table->record[0]", table->record[0], table->s->reclength);
DBUG_DUMP("table->record[1]", table->record[1], table->s->reclength);
#endif
/* /*
We need to set the null bytes to ensure that the filler bit are We need to set the null bytes to ensure that the filler bit are
all set when returning. There are storage engines that just set all set when returning. There are storage engines that just set
...@@ -6830,6 +6860,14 @@ static int find_and_fetch_row(TABLE *table, byte *key) ...@@ -6830,6 +6860,14 @@ static int find_and_fetch_row(TABLE *table, byte *key)
DBUG_RETURN(error); DBUG_RETURN(error);
} }
/*
Don't print debug messages when running valgrind since they can
trigger false warnings.
*/
#ifndef HAVE_purify
DBUG_DUMP("table->record[0]", table->record[0], table->s->reclength);
DBUG_DUMP("table->record[1]", table->record[1], table->s->reclength);
#endif
/* /*
Below is a minor "optimization". If the key (i.e., key number Below is a minor "optimization". If the key (i.e., key number
0) has the HA_NOSAME flag set, we know that we have found the 0) has the HA_NOSAME flag set, we know that we have found the
...@@ -6847,9 +6885,6 @@ static int find_and_fetch_row(TABLE *table, byte *key) ...@@ -6847,9 +6885,6 @@ static int find_and_fetch_row(TABLE *table, byte *key)
if (table->key_info->flags & HA_NOSAME) if (table->key_info->flags & HA_NOSAME)
{ {
table->file->ha_index_end(); table->file->ha_index_end();
#ifdef HAVE_purify
valgrind_check_mem(table->record[1], table->s->reclength);
#endif
DBUG_RETURN(0); DBUG_RETURN(0);
} }
...@@ -6926,16 +6961,9 @@ static int find_and_fetch_row(TABLE *table, byte *key) ...@@ -6926,16 +6961,9 @@ static int find_and_fetch_row(TABLE *table, byte *key)
table->file->ha_rnd_end(); table->file->ha_rnd_end();
DBUG_ASSERT(error == HA_ERR_END_OF_FILE || error == 0); DBUG_ASSERT(error == HA_ERR_END_OF_FILE || error == 0);
#ifdef HAVE_purify
if (error == 0)
valgrind_check_mem(table->record[1], table->s->reclength);
#endif
DBUG_RETURN(error); DBUG_RETURN(error);
} }
#ifdef HAVE_purify
valgrind_check_mem(table->record[1], table->s->reclength);
#endif
DBUG_RETURN(0); DBUG_RETURN(0);
} }
#endif #endif
...@@ -7184,9 +7212,14 @@ int Update_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli, ...@@ -7184,9 +7212,14 @@ int Update_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
next_start, &m_cols, row_end, &m_master_reclength, next_start, &m_cols, row_end, &m_master_reclength,
table->write_set, UPDATE_ROWS_EVENT); table->write_set, UPDATE_ROWS_EVENT);
DBUG_DUMP("record[0]", (const char *)table->record[0], table->s->reclength); /*
DBUG_DUMP("m_after_image", (const char *)m_after_image, table->s->reclength); Don't print debug messages when running valgrind since they can
trigger false warnings.
*/
#ifndef HAVE_purify
DBUG_DUMP("record[0]", (const char *)table->record[0], m_master_reclength);
DBUG_DUMP("m_after_image", (const char *)m_after_image, m_master_reclength);
#endif
/* /*
If we will access rows using the random access method, m_key will If we will access rows using the random access method, m_key will
......
...@@ -2727,11 +2727,17 @@ int THD::binlog_update_row(TABLE* table, bool is_trans, ...@@ -2727,11 +2727,17 @@ int THD::binlog_update_row(TABLE* table, bool is_trans,
before_record); before_record);
my_size_t const after_size= pack_row(table, cols, after_row, my_size_t const after_size= pack_row(table, cols, after_row,
after_record); after_record);
/*
Don't print debug messages when running valgrind since they can
trigger false warnings.
*/
#ifndef HAVE_purify
DBUG_DUMP("before_record", (const char *)before_record, table->s->reclength); DBUG_DUMP("before_record", (const char *)before_record, table->s->reclength);
DBUG_DUMP("after_record", (const char *)after_record, table->s->reclength); DBUG_DUMP("after_record", (const char *)after_record, table->s->reclength);
DBUG_DUMP("before_row", (const char *)before_row, before_size); DBUG_DUMP("before_row", (const char *)before_row, before_size);
DBUG_DUMP("after_row", (const char *)after_row, after_size); DBUG_DUMP("after_row", (const char *)after_row, after_size);
#endif
Rows_log_event* const ev= Rows_log_event* const ev=
binlog_prepare_pending_rows_event(table, server_id, cols, colcnt, binlog_prepare_pending_rows_event(table, server_id, cols, colcnt,
......
...@@ -1377,9 +1377,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, ...@@ -1377,9 +1377,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
if (!(record= (byte*) alloc_root(&outparam->mem_root, if (!(record= (byte*) alloc_root(&outparam->mem_root,
share->rec_buff_length * records))) share->rec_buff_length * records)))
goto err; /* purecov: inspected */ goto err; /* purecov: inspected */
#ifdef HAVE_purify
bzero(record, share->rec_buff_length * records);
#endif
if (records == 0) if (records == 0)
{ {
/* We are probably in hard repair, and the buffers should not be used */ /* We are probably in hard repair, and the buffers should not be used */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment