[MDEV-25481] Memory leak in Cached_item_str::Cached_item_str upon query WITH TIES involving a blob Created: 2021-04-21  Updated: 2021-06-29  Resolved: 2021-06-29

Status: Closed
Project: MariaDB Server
Component/s: Optimizer
Affects Version/s: 10.6
Fix Version/s: 10.6.3

Type: Bug Priority: Blocker
Reporter: Elena Stepanova Assignee: Vicențiu Ciorbaru
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates
relates to MDEV-23908 Implement SELECT ... OFFSET ... FETCH... Closed

 Description   

CREATE TABLE t (a TEXT);
INSERT INTO t VALUES ('foo'),('bar');
SELECT a FROM t ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
 
# Cleanup
DROP TABLE t;

10.6 bc04ded235 Valgrind

Warning: Memory not freed: 1056
==1418319== 1,056 bytes in 1 blocks are definitely lost in loss record 1 of 1
==1418319==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==1418319==    by 0x173BBED: my_malloc (my_malloc.c:90)
==1418319==    by 0xB19A94: Binary_string::real_alloc(unsigned long) (sql_string.cc:44)
==1418319==    by 0xC31852: Binary_string::Binary_string(unsigned long) (sql_string.h:391)
==1418319==    by 0xC3188C: String::String(unsigned long) (sql_string.h:733)
==1418319==    by 0xDFEAAB: Cached_item_str::Cached_item_str(THD*, Item*) (item_buff.cc:76)
==1418319==    by 0xDFE8AF: new_Cached_item(THD*, Item*, bool) (item_buff.cc:50)
==1418319==    by 0xAC0B24: fill_cached_item_list(THD*, List<Cached_item>*, st_order*, unsigned int) (sql_select.cc:25321)
==1418319==    by 0xAC0C09: alloc_order_fields(JOIN*, st_order*, unsigned int) (sql_select.cc:25346)
==1418319==    by 0xA84531: JOIN::make_aggr_tables_info() (sql_select.cc:3827)
==1418319==    by 0xA81728: JOIN::optimize_stage2() (sql_select.cc:3099)
==1418319==    by 0xA7EC8C: JOIN::optimize_inner() (sql_select.cc:2351)
==1418319==    by 0xA7C5AC: JOIN::optimize() (sql_select.cc:1694)
==1418319==    by 0xA87E85: mysql_select(THD*, TABLE_LIST*, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) (sql_select.cc:4840)
==1418319==    by 0xA773A0: handle_select(THD*, LEX*, select_result*, unsigned long) (sql_select.cc:446)
==1418319==    by 0xA38E09: execute_sqlcom_select(THD*, TABLE_LIST*) (sql_parse.cc:6244)

Without valgrind:

Warning: Memory not freed: 1056
Warning: 1056 bytes lost at 0x61a0000270f0, allocated by T@0 at mysys/my_malloc.c:90, sql/sql_string.cc:44, sql/sql_string.h:392, sql/sql_string.h:734, sql/item_buff.cc:76, sql/item_buff.cc:50, sql/sql_select.cc:25321, sql/sql_select.cc:25348
Warning: 1056 bytes lost at 0x61a0000270f0, allocated by T@0 at mysys/my_malloc.c:90, sql/sql_string.cc:44, sql/sql_string.h:392, sql/sql_string.h:734, sql/item_buff.cc:76, sql/item_buff.cc:50, sql/sql_select.cc:25321, sql/sql_select.cc:25348

No leak with FETCH ... ONLY instead of FETCH ... WITH TIES.



 Comments   
Comment by Vicențiu Ciorbaru [ 2021-06-29 ]

Fixed by calling the item's destructors in JOIN::cleanup.

Generated at Thu Feb 08 09:38:01 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.