Bug #79973 blocks are definitely lost in row_vers_old_has_index_entry
Submitted: 14 Jan 2016 2:57 Modified: 14 Jan 2016 22:45
Reporter: Shaohua Wang Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S3 (Non-critical)
Version:8.0.0 OS:Any
Assigned to: CPU Architecture:Any

[14 Jan 2016 2:57] Shaohua Wang
Description:
blocks are definitely lost in row_vers_old_has_index_entry

How to repeat:
./mtr --mem virtual_basic --valgrind --valgrind-option=--track-origins=yes
[14 Jan 2016 3:03] Shaohua Wang
Posted by developer:
 
Thread 1:
264 bytes in 1 blocks are definitely lost in loss record 1 of 2
   at 0x4C2E112: malloc (vg_replace_malloc.c:299)
   by 0x1C893BD: ut_allocator<unsigned char>::allocate(unsigned long, unsigned char const*, char const*, bool, bool) (ut0new.h:355)
   by 0x1F0E753: mem_heap_create_block_func(mem_block_info_t*, unsigned long, char const*, unsigned long, unsigned long) (memory.cc:308)
   by 0x1E71756: mem_heap_create_func(unsigned long, char const*, unsigned long, unsigned long) (mem0mem.ic:493)
   by 0x1E70E22: row_vers_old_has_index_entry(unsigned long, unsigned char const*, mtr_t*, dict_index_t*, dtuple_t const*, unsigned long, unsigned long) (row0vers.cc:788)
   by 0x1E2C37A: row_purge_poss_sec(purge_node_t*, dict_index_t*, dtuple_t const*) (row0purge.cc:272)
   by 0x1E307AD: row_purge_remove_sec_if_poss_leaf(purge_node_t*, dict_index_t*, dtuple_t const*) (row0purge.cc:492)
   by 0x1E2F76F: row_purge_remove_sec_if_poss(purge_node_t*, dict_index_t*, dtuple_t const*) (row0purge.cc:590)
   by 0x1E2ECA0: row_purge_del_mark(purge_node_t*) (row0purge.cc:660)
   by 0x1E2E5BA: row_purge_record_func(purge_node_t*, unsigned char*, que_thr_t const*, bool) (row0purge.cc:986)
   by 0x1E2CACF: row_purge(purge_node_t*, unsigned char*, que_thr_t*) (row0purge.cc:1048)
   by 0x1E2C94B: row_purge_step(que_thr_t*) (row0purge.cc:1127)
   by 0x1D9D03B: que_thr_step(que_thr_t*) (que0que.cc:1053)
   by 0x1D9C228: que_run_threads_low(que_thr_t*) (que0que.cc:1113)
   by 0x1D9BFC2: que_run_threads(que_thr_t*) (que0que.cc:1153)
   by 0x1E7F625: srv_task_execute() (srv0srv.cc:2404)

1,184 bytes in 1 blocks are definitely lost in loss record 2 of 2
   at 0x4C2E112: malloc (vg_replace_malloc.c:299)
   by 0x1C893BD: ut_allocator<unsigned char>::allocate(unsigned long, unsigned char const*, char const*, bool, bool) (ut0new.h:355)
   by 0x1F0E753: mem_heap_create_block_func(mem_block_info_t*, unsigned long, char const*, unsigned long, unsigned long) (memory.cc:308)
   by 0x1E71756: mem_heap_create_func(unsigned long, char const*, unsigned long, unsigned long) (mem0mem.ic:493)
   by 0x1E70CD6: row_vers_old_has_index_entry(unsigned long, unsigned char const*, mtr_t*, dict_index_t*, dtuple_t const*, unsigned long, unsigned long) (row0vers.cc:771)
   by 0x1E2C37A: row_purge_poss_sec(purge_node_t*, dict_index_t*, dtuple_t const*) (row0purge.cc:272)
   by 0x1E307AD: row_purge_remove_sec_if_poss_leaf(purge_node_t*, dict_index_t*, dtuple_t const*) (row0purge.cc:492)
   by 0x1E2F76F: row_purge_remove_sec_if_poss(purge_node_t*, dict_index_t*, dtuple_t const*) (row0purge.cc:590)
   by 0x1E2ECA0: row_purge_del_mark(purge_node_t*) (row0purge.cc:660)
   by 0x1E2E5BA: row_purge_record_func(purge_node_t*, unsigned char*, que_thr_t const*, bool) (row0purge.cc:986)
   by 0x1E2CACF: row_purge(purge_node_t*, unsigned char*, que_thr_t*) (row0purge.cc:1048)
   by 0x1E2C94B: row_purge_step(que_thr_t*) (row0purge.cc:1127)
   by 0x1D9D03B: que_thr_step(que_thr_t*) (que0que.cc:1053)
   by 0x1D9C228: que_run_threads_low(que_thr_t*) (que0que.cc:1113)
   by 0x1D9BFC2: que_run_threads(que_thr_t*) (que0que.cc:1153)
   by 0x1E7F625: srv_task_execute() (srv0srv.cc:2404)
[14 Jan 2016 3:30] Shaohua Wang
Posted by developer:
 
 We definitely forgot to free heaps when INNODB_DD_VC_SUPPORT is defined in row_vers_old_has_index_entry()
[14 Jan 2016 22:45] Daniel Price
Fixed as of the upcoming 5.8.0 release, and here's the changelog entry:

Blocks were lost in row_vers_old_has_index_entry() due to unfreed heaps.
[18 Jun 2016 21:35] Omer Barnir
Posted by developer:
 
Reported version value updated to reflect release name change from 5.8 to 8.0