Commit 06c7f493 authored by Sergey Petrunya's avatar Sergey Petrunya

MDEV-7068: MRR accessing uninitialised bytes, test case failure main.innodb_mrr

- Don't call index_reader->interrupt_read() if the
  index reader has returned all rows that matched its keys.
parent 8c7ef99b
...@@ -685,6 +685,17 @@ int Mrr_ordered_rndpos_reader::refill_from_index_reader() ...@@ -685,6 +685,17 @@ int Mrr_ordered_rndpos_reader::refill_from_index_reader()
rowid_buffer->write(); rowid_buffer->write();
} }
/*
When index_reader_needs_refill=TRUE, this means we've got all of index
tuples for lookups keys that index_reader had. We are not in the middle
of an index read, so there is no need to call interrupt_read.
Actually, we must not call interrupt_read(), because it could be that we
haven't read a single row (because all index lookups returned
HA_ERR_KEY_NOT_FOUND). In this case, interrupt_read() will cause [harmless]
valgrind warnings when trying to save garbage from table->record[0].
*/
if (!index_reader_needs_refill)
index_reader->interrupt_read(); index_reader->interrupt_read();
/* Sort the buffer contents by rowid */ /* Sort the buffer contents by rowid */
rowid_buffer->sort((qsort2_cmp)rowid_cmp_reverse, (void*)file); rowid_buffer->sort((qsort2_cmp)rowid_cmp_reverse, (void*)file);
......
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