[MDEV-24467] Memory not freed after failed INSERT DELAYED Created: 2020-12-21  Updated: 2021-11-06  Resolved: 2021-10-11

Status: Closed
Project: MariaDB Server
Component/s: Data Manipulation - Insert
Affects Version/s: 10.2, 10.3, 10.4, 10.5
Fix Version/s: 10.2.41, 10.3.32, 10.4.22, 10.5.13, 10.6.5, 10.7.1

Type: Bug Priority: Critical
Reporter: Elena Stepanova Assignee: Oleksandr Byelkin
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates
relates to MDEV-24436 INSERT DELAYED leaks memory in 10.5.8 Closed
relates to MDEV-26986 LeakSanitizer/Valgrind errors in Bina... Closed
relates to MDEV-25925 Warning: Memory not freed: 32 on INSE... Closed

 Description   

CREATE TABLE t1 (a VARCHAR(1)) ENGINE=MyISAM;
ALTER TABLE t1 ADD b BLOB DEFAULT 'x';
--error ER_DATA_TOO_LONG
INSERT DELAYED INTO t1 (a) VALUES ('foo');
 
# Cleanup
DROP TABLE t1;

10.2 dfe8ef8b valgrind

Warning: Memory not freed: 32
==794415== 32 bytes in 1 blocks are definitely lost in loss record 1 of 2
==794415==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==794415==    by 0x1742638: my_malloc (my_malloc.c:88)
==794415==    by 0xB0B362: Binary_string::real_alloc(unsigned long) (sql_string.cc:44)
==794415==    by 0x8E8D52: Binary_string::alloc(unsigned long) (sql_string.h:639)
==794415==    by 0xD77B20: Field_blob::store(char const*, unsigned long, charset_info_st const*) (field.cc:8591)
==794415==    by 0xDBCE3C: Item::save_str_value_in_field(Field*, String*) (item.cc:406)
==794415==    by 0xDD1BAD: Item_string::save_in_field(Field*, bool) (item.cc:6675)
==794415==    by 0xB7BF99: TABLE::update_default_fields(bool) (table.cc:8707)
==794415==    by 0x98322E: fill_record(THD*, TABLE*, List<Item>&, List<Item>&, bool, bool) (sql_base.cc:8507)
==794415==    by 0x98375B: fill_record_n_invoke_before_triggers(THD*, TABLE*, List<Item>&, List<Item>&, bool, trg_event_type) (sql_base.cc:8642)
==794415==    by 0x9D05EF: mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool, select_result*) (sql_insert.cc:996)
==794415==    by 0xA24FB3: mysql_execute_command(THD*) (sql_parse.cc:4587)
==794415==    by 0xA30D6B: mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) (sql_parse.cc:8042)
==794415==    by 0xA1CBFC: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) (sql_parse.cc:1872)
==794415==    by 0xA1B3F0: do_command(THD*) (sql_parse.cc:1353)
==794415==    by 0xBCFA34: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1410)
==794415==    by 0xBCF797: handle_one_connection (sql_connect.cc:1312)
==794415==    by 0x114AE80: pfs_spawn_thread (pfs.cc:2201)
==794415==    by 0x4C31608: start_thread (pthread_create.c:477)
==794415==    by 0x50C0292: clone (clone.S:95)

10.2 dfe8ef8b normal debug

Warning: Memory not freed: 8
Warning:    8 bytes lost at 0x7f1084010e70, allocated by T@0 at sql/sql_string.cc:45, sql/sql_string.h:361, sql/field.cc:8297, sql/item.cc:480, sql/item.cc:6440, sql/table.cc:7845, sql/sql_base.cc:8107, sql/sql_base.cc:8241
Warning:    8 bytes lost at 0x7f1084010e70, allocated by T@0 at sql/sql_string.cc:45, sql/sql_string.h:361, sql/field.cc:8297, sql/item.cc:480, sql/item.cc:6440, sql/table.cc:7845, sql/sql_base.cc:8107, sql/sql_base.cc:8241

10.2 dfe8ef8b non-debug ASAN

==794670==ERROR: LeakSanitizer: detected memory leaks
 
Direct leak of 16 byte(s) in 1 object(s) allocated from:
    #0 0x7f0f0fd09bc8 in malloc (/lib/x86_64-linux-gnu/libasan.so.5+0x10dbc8)
    #1 0x56124e3ea9e6 in my_malloc /data/src/10.2/mysys/my_malloc.c:101
    #2 0x56124cf10c13 in String::real_alloc(unsigned long) /data/src/10.2/sql/sql_string.cc:45
    #3 0x56124d2c03be in String::alloc(unsigned long) /data/src/10.2/sql/sql_string.h:361
    #4 0x56124d2c03be in Field_blob::store(char const*, unsigned int, charset_info_st const*) /data/src/10.2/sql/field.cc:8297
    #5 0x56124cfebccb in TABLE::update_default_fields(bool) /data/src/10.2/sql/table.cc:7845
    #6 0x56124cc59f2b in fill_record(THD*, TABLE*, List<Item>&, List<Item>&, bool, bool) /data/src/10.2/sql/sql_base.cc:8108
    #7 0x56124cc5aa9d in fill_record_n_invoke_before_triggers(THD*, TABLE*, List<Item>&, List<Item>&, bool, trg_event_type) /data/src/10.2/sql/sql_base.cc:8241
    #8 0x56124ccf722c in mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) /data/src/10.2/sql/sql_insert.cc:966
    #9 0x56124cd40e59 in mysql_execute_command(THD*) /data/src/10.2/sql/sql_parse.cc:4193
    #10 0x56124cd58d9f in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.2/sql/sql_parse.cc:7762
    #11 0x56124cd627b3 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.2/sql/sql_parse.cc:1827
    #12 0x56124cd67135 in do_command(THD*) /data/src/10.2/sql/sql_parse.cc:1381
    #13 0x56124d066476 in do_handle_one_connection(CONNECT*) /data/src/10.2/sql/sql_connect.cc:1336
    #14 0x56124d066bbe in handle_one_connection /data/src/10.2/sql/sql_connect.cc:1241
    #15 0x56124e3320a8 in pfs_spawn_thread /data/src/10.2/storage/perfschema/pfs.cc:1869
    #16 0x7f0f0f7a2608 in start_thread /build/glibc-ZN95T4/glibc-2.31/nptl/pthread_create.c:477
 
SUMMARY: AddressSanitizer: 16 byte(s) leaked in 1 allocation(s).



 Comments   
Comment by Sergei Golubchik [ 2020-12-23 ]

related to MDEV-24436 ?

Comment by Elena Stepanova [ 2021-02-02 ]

Field_xxx::store can be different, e.g. here is the version with geometry:

CREATE TABLE t1 (a VARCHAR(1)) ENGINE=MyISAM;
ALTER TABLE t1 ADD b GEOMETRY DEFAULT ST_GEOMFROMTEXT('Point(1 1)');
--error ER_DATA_TOO_LONG
INSERT DELAYED INTO t1 (a) VALUES ('foo');
 
# Cleanup
DROP TABLE t1;

10.2 ceb39761 ASAN non-debug

==3328432==ERROR: LeakSanitizer: detected memory leaks
 
Direct leak of 40 byte(s) in 1 object(s) allocated from:
    #0 0x7f489a137bc8 in malloc (/lib/x86_64-linux-gnu/libasan.so.5+0x10dbc8)
    #1 0x55942bb76086 in my_malloc /data/src/10.2/mysys/my_malloc.c:101
    #2 0x55942a699a43 in String::real_alloc(unsigned long) /data/src/10.2/sql/sql_string.cc:45
    #3 0x55942a69a33a in String::alloc(unsigned long) /data/src/10.2/sql/sql_string.h:361
    #4 0x55942a69a33a in String::copy(char const*, unsigned long, charset_info_st const*) /data/src/10.2/sql/sql_string.cc:188
    #5 0x55942aa2df25 in Field_geom::store(char const*, unsigned int, charset_info_st const*) /data/src/10.2/sql/field.cc:8928
    #6 0x55942aab72f9 in Item::save_in_field(Field*, bool) /data/src/10.2/sql/item.cc:6397
    #7 0x55942a774d0b in TABLE::update_default_fields(bool) /data/src/10.2/sql/table.cc:7851
    #8 0x55942a3e1f4b in fill_record(THD*, TABLE*, List<Item>&, List<Item>&, bool, bool) /data/src/10.2/sql/sql_base.cc:8138
    #9 0x55942a3e2abd in fill_record_n_invoke_before_triggers(THD*, TABLE*, List<Item>&, List<Item>&, bool, trg_event_type) /data/src/10.2/sql/sql_base.cc:8271
    #10 0x55942a47f3cc in mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) /data/src/10.2/sql/sql_insert.cc:966
    #11 0x55942a4c91c9 in mysql_execute_command(THD*) /data/src/10.2/sql/sql_parse.cc:4194
    #12 0x55942a4e11ef in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.2/sql/sql_parse.cc:7763
    #13 0x55942a4ea77b in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.2/sql/sql_parse.cc:1827
    #14 0x55942a4ef655 in do_command(THD*) /data/src/10.2/sql/sql_parse.cc:1381
    #15 0x55942a7ef606 in do_handle_one_connection(CONNECT*) /data/src/10.2/sql/sql_connect.cc:1336
    #16 0x55942a7efd4e in handle_one_connection /data/src/10.2/sql/sql_connect.cc:1241
    #17 0x55942babd6f8 in pfs_spawn_thread /data/src/10.2/storage/perfschema/pfs.cc:1869
    #18 0x7f4899bd0608 in start_thread /build/glibc-ZN95T4/glibc-2.31/nptl/pthread_create.c:477
 
SUMMARY: AddressSanitizer: 40 byte(s) leaked in 1 allocation(s).

Comment by Oleksandr Byelkin [ 2021-09-21 ]

Allocated string really lost in delayed insert cleanup (require long investigation)

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