[MDEV-32614] LeakSanitizer errors in copy_data_between_tables Created: 2023-10-27  Updated: 2024-02-06  Resolved: 2024-01-30

Status: Closed
Project: MariaDB Server
Component/s: Data Definition - Alter Table, Locking
Affects Version/s: 11.2
Fix Version/s: 11.3.2, 11.2.4

Type: Bug Priority: Critical
Reporter: Elena Stepanova Assignee: Nikita Malyavin
Resolution: Fixed Votes: 0
Labels: None


 Description   

The test case is non-deterministic, run with --repeat=N. It usually fails for me on the 1st attempt, but it can vary on different machines and builds.

--source include/have_sequence.inc
 
CREATE TABLE t (a INT, b INT) ENGINE=Aria;
INSERT INTO t SELECT seq, seq FROM seq_1_to_1000;
BACKUP STAGE START;
 
--connect (con1,localhost,root,,)
SET lock_wait_timeout= 1;
--send
  ALTER TABLE t ADD INDEX (b);
 
--connection default
BACKUP STAGE BLOCK_COMMIT;
 
--connection con1
--error 0,ER_LOCK_WAIT_TIMEOUT
--reap
--echo # Error $mysql_errno
--send
  ALTER TABLE t ADD INDEX (a);

11.2 a05b5dd5

Warning: Memory not freed: 135608
 
=================================================================
==269613==ERROR: LeakSanitizer: detected memory leaks
 
Direct leak of 1952 byte(s) in 1 object(s) allocated from:
    #0 0x7f4e76cb94c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x55dd65a849c4 in copy_data_between_tables /data/src/11.2/sql/sql_table.cc:11954
    #2 0x55dd65a7e16a in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, Table_specification_st*, TABLE_LIST*, Recreate_info*, Alter_info*, unsigned int, st_order*, bool, bool) /data/src/11.2/sql/sql_table.cc:11194
    #3 0x55dd65c46cbc in Sql_cmd_alter_table::execute(THD*) /data/src/11.2/sql/sql_alter.cc:615
    #4 0x55dd6577a77f in mysql_execute_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:5775
    #5 0x55dd65787670 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /data/src/11.2/sql/sql_parse.cc:7810
    #6 0x55dd6575fa30 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /data/src/11.2/sql/sql_parse.cc:1893
    #7 0x55dd6575c76d in do_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:1406
    #8 0x55dd65c28b80 in do_handle_one_connection(CONNECT*, bool) /data/src/11.2/sql/sql_connect.cc:1418
    #9 0x55dd65c28541 in handle_one_connection /data/src/11.2/sql/sql_connect.cc:1320
    #10 0x55dd66851d1b in pfs_spawn_thread /data/src/11.2/storage/perfschema/pfs.cc:2201
    #11 0x7f4e760a8043 in start_thread nptl/pthread_create.c:442
 
Indirect leak of 65560 byte(s) in 1 object(s) allocated from:
    #0 0x7f4e76cb89cf in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x55dd6743a9bf in my_malloc /data/src/11.2/mysys/my_malloc.c:89
    #2 0x55dd673df059 in init_io_cache_ext /data/src/11.2/mysys/mf_iocache.c:248
    #3 0x55dd673df884 in init_io_cache /data/src/11.2/mysys/mf_iocache.c:301
    #4 0x55dd663e7c9b in Event_log::open(cache_type) /data/src/11.2/sql/log.cc:3847
    #5 0x55dd65a8e664 in Cache_flip_event_log::open(cache_type) (/mnt8t/bld/11.2-asan/bin/mariadbd+0x1f51664)
    #6 0x55dd65a84b33 in copy_data_between_tables /data/src/11.2/sql/sql_table.cc:11958
    #7 0x55dd65a7e16a in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, Table_specification_st*, TABLE_LIST*, Recreate_info*, Alter_info*, unsigned int, st_order*, bool, bool) /data/src/11.2/sql/sql_table.cc:11194
    #8 0x55dd65c46cbc in Sql_cmd_alter_table::execute(THD*) /data/src/11.2/sql/sql_alter.cc:615
    #9 0x55dd6577a77f in mysql_execute_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:5775
    #10 0x55dd65787670 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /data/src/11.2/sql/sql_parse.cc:7810
    #11 0x55dd6575fa30 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /data/src/11.2/sql/sql_parse.cc:1893
    #12 0x55dd6575c76d in do_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:1406
    #13 0x55dd65c28b80 in do_handle_one_connection(CONNECT*, bool) /data/src/11.2/sql/sql_connect.cc:1418
    #14 0x55dd65c28541 in handle_one_connection /data/src/11.2/sql/sql_connect.cc:1320
    #15 0x55dd66851d1b in pfs_spawn_thread /data/src/11.2/storage/perfschema/pfs.cc:2201
    #16 0x7f4e760a8043 in start_thread nptl/pthread_create.c:442
 
Indirect leak of 65560 byte(s) in 1 object(s) allocated from:
    #0 0x7f4e76cb89cf in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x55dd6743a9bf in my_malloc /data/src/11.2/mysys/my_malloc.c:89
    #2 0x55dd673df059 in init_io_cache_ext /data/src/11.2/mysys/mf_iocache.c:248
    #3 0x55dd673df884 in init_io_cache /data/src/11.2/mysys/mf_iocache.c:301
    #4 0x55dd65a8e74a in Cache_flip_event_log::open(cache_type) (/mnt8t/bld/11.2-asan/bin/mariadbd+0x1f5174a)
    #5 0x55dd65a84b33 in copy_data_between_tables /data/src/11.2/sql/sql_table.cc:11958
    #6 0x55dd65a7e16a in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, Table_specification_st*, TABLE_LIST*, Recreate_info*, Alter_info*, unsigned int, st_order*, bool, bool) /data/src/11.2/sql/sql_table.cc:11194
    #7 0x55dd65c46cbc in Sql_cmd_alter_table::execute(THD*) /data/src/11.2/sql/sql_alter.cc:615
    #8 0x55dd6577a77f in mysql_execute_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:5775
    #9 0x55dd65787670 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /data/src/11.2/sql/sql_parse.cc:7810
    #10 0x55dd6575fa30 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /data/src/11.2/sql/sql_parse.cc:1893
    #11 0x55dd6575c76d in do_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:1406
    #12 0x55dd65c28b80 in do_handle_one_connection(CONNECT*, bool) /data/src/11.2/sql/sql_connect.cc:1418
    #13 0x55dd65c28541 in handle_one_connection /data/src/11.2/sql/sql_connect.cc:1320
    #14 0x55dd66851d1b in pfs_spawn_thread /data/src/11.2/storage/perfschema/pfs.cc:2201
    #15 0x7f4e760a8043 in start_thread nptl/pthread_create.c:442
 
Indirect leak of 2072 byte(s) in 1 object(s) allocated from:
    #0 0x7f4e76cb89cf in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x55dd6743a9bf in my_malloc /data/src/11.2/mysys/my_malloc.c:89
    #2 0x55dd673c510a in init_dynamic_array2 /data/src/11.2/mysys/array.c:73
    #3 0x55dd673d52e0 in my_hash_init2 /data/src/11.2/mysys/hash.c:99
    #4 0x55dd67456a15 in safe_mutex_lazy_init_deadlock_detection /data/src/11.2/mysys/thr_mutex.c:175
    #5 0x55dd6745752d in safe_mutex_lock /data/src/11.2/mysys/thr_mutex.c:316
    #6 0x55dd6744584f in psi_mutex_lock /data/src/11.2/mysys/my_thr_init.c:487
    #7 0x55dd65a2a1f6 in inline_mysql_mutex_lock /data/src/11.2/include/mysql/psi/mysql_thread.h:746
    #8 0x55dd65a8e814 in Cache_flip_event_log::flip() (/mnt8t/bld/11.2-asan/bin/mariadbd+0x1f51814)
    #9 0x55dd65a82247 in online_alter_read_from_binlog /data/src/11.2/sql/sql_table.cc:11715
    #10 0x55dd65a8670c in copy_data_between_tables /data/src/11.2/sql/sql_table.cc:12164
    #11 0x55dd65a7e16a in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, Table_specification_st*, TABLE_LIST*, Recreate_info*, Alter_info*, unsigned int, st_order*, bool, bool) /data/src/11.2/sql/sql_table.cc:11194
    #12 0x55dd65c46cbc in Sql_cmd_alter_table::execute(THD*) /data/src/11.2/sql/sql_alter.cc:615
    #13 0x55dd6577a77f in mysql_execute_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:5775
    #14 0x55dd65787670 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /data/src/11.2/sql/sql_parse.cc:7810
    #15 0x55dd6575fa30 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /data/src/11.2/sql/sql_parse.cc:1893
    #16 0x55dd6575c76d in do_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:1406
    #17 0x55dd65c28b80 in do_handle_one_connection(CONNECT*, bool) /data/src/11.2/sql/sql_connect.cc:1418
    #18 0x55dd65c28541 in handle_one_connection /data/src/11.2/sql/sql_connect.cc:1320
    #19 0x55dd66851d1b in pfs_spawn_thread /data/src/11.2/storage/perfschema/pfs.cc:2201
    #20 0x7f4e760a8043 in start_thread nptl/pthread_create.c:442
 
Indirect leak of 2072 byte(s) in 1 object(s) allocated from:
    #0 0x7f4e76cb89cf in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x55dd6743a9bf in my_malloc /data/src/11.2/mysys/my_malloc.c:89
    #2 0x55dd673c510a in init_dynamic_array2 /data/src/11.2/mysys/array.c:73
    #3 0x55dd673d52e0 in my_hash_init2 /data/src/11.2/mysys/hash.c:99
    #4 0x55dd674569a9 in safe_mutex_lazy_init_deadlock_detection /data/src/11.2/mysys/thr_mutex.c:172
    #5 0x55dd6745752d in safe_mutex_lock /data/src/11.2/mysys/thr_mutex.c:316
    #6 0x55dd6744584f in psi_mutex_lock /data/src/11.2/mysys/my_thr_init.c:487
    #7 0x55dd65a2a1f6 in inline_mysql_mutex_lock /data/src/11.2/include/mysql/psi/mysql_thread.h:746
    #8 0x55dd65a8e814 in Cache_flip_event_log::flip() (/mnt8t/bld/11.2-asan/bin/mariadbd+0x1f51814)
    #9 0x55dd65a82247 in online_alter_read_from_binlog /data/src/11.2/sql/sql_table.cc:11715
    #10 0x55dd65a8670c in copy_data_between_tables /data/src/11.2/sql/sql_table.cc:12164
    #11 0x55dd65a7e16a in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, Table_specification_st*, TABLE_LIST*, Recreate_info*, Alter_info*, unsigned int, st_order*, bool, bool) /data/src/11.2/sql/sql_table.cc:11194
    #12 0x55dd65c46cbc in Sql_cmd_alter_table::execute(THD*) /data/src/11.2/sql/sql_alter.cc:615
    #13 0x55dd6577a77f in mysql_execute_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:5775
    #14 0x55dd65787670 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /data/src/11.2/sql/sql_parse.cc:7810
    #15 0x55dd6575fa30 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /data/src/11.2/sql/sql_parse.cc:1893
    #16 0x55dd6575c76d in do_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:1406
    #17 0x55dd65c28b80 in do_handle_one_connection(CONNECT*, bool) /data/src/11.2/sql/sql_connect.cc:1418
    #18 0x55dd65c28541 in handle_one_connection /data/src/11.2/sql/sql_connect.cc:1320
    #19 0x55dd66851d1b in pfs_spawn_thread /data/src/11.2/storage/perfschema/pfs.cc:2201
    #20 0x7f4e760a8043 in start_thread nptl/pthread_create.c:442
 
Indirect leak of 296 byte(s) in 1 object(s) allocated from:
    #0 0x7f4e76cb89cf in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x55dd6743a9bf in my_malloc /data/src/11.2/mysys/my_malloc.c:89
    #2 0x55dd67414e15 in my_multi_malloc /data/src/11.2/mysys/mulalloc.c:59
    #3 0x55dd6745684e in safe_mutex_lazy_init_deadlock_detection /data/src/11.2/mysys/thr_mutex.c:159
    #4 0x55dd6745752d in safe_mutex_lock /data/src/11.2/mysys/thr_mutex.c:316
    #5 0x55dd6744584f in psi_mutex_lock /data/src/11.2/mysys/my_thr_init.c:487
    #6 0x55dd65a2a1f6 in inline_mysql_mutex_lock /data/src/11.2/include/mysql/psi/mysql_thread.h:746
    #7 0x55dd65a8e814 in Cache_flip_event_log::flip() (/mnt8t/bld/11.2-asan/bin/mariadbd+0x1f51814)
    #8 0x55dd65a82247 in online_alter_read_from_binlog /data/src/11.2/sql/sql_table.cc:11715
    #9 0x55dd65a8670c in copy_data_between_tables /data/src/11.2/sql/sql_table.cc:12164
    #10 0x55dd65a7e16a in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, Table_specification_st*, TABLE_LIST*, Recreate_info*, Alter_info*, unsigned int, st_order*, bool, bool) /data/src/11.2/sql/sql_table.cc:11194
    #11 0x55dd65c46cbc in Sql_cmd_alter_table::execute(THD*) /data/src/11.2/sql/sql_alter.cc:615
    #12 0x55dd6577a77f in mysql_execute_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:5775
    #13 0x55dd65787670 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /data/src/11.2/sql/sql_parse.cc:7810
    #14 0x55dd6575fa30 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /data/src/11.2/sql/sql_parse.cc:1893
    #15 0x55dd6575c76d in do_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:1406
    #16 0x55dd65c28b80 in do_handle_one_connection(CONNECT*, bool) /data/src/11.2/sql/sql_connect.cc:1418
    #17 0x55dd65c28541 in handle_one_connection /data/src/11.2/sql/sql_connect.cc:1320
    #18 0x55dd66851d1b in pfs_spawn_thread /data/src/11.2/storage/perfschema/pfs.cc:2201
    #19 0x7f4e760a8043 in start_thread nptl/pthread_create.c:442
 
Indirect leak of 48 byte(s) in 1 object(s) allocated from:
    #0 0x7f4e76cb89cf in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x55dd6743a9bf in my_malloc /data/src/11.2/mysys/my_malloc.c:89
    #2 0x55dd6743bbdd in my_strdup /data/src/11.2/mysys/my_malloc.c:239
    #3 0x55dd65a8e6cf in Cache_flip_event_log::open(cache_type) (/mnt8t/bld/11.2-asan/bin/mariadbd+0x1f516cf)
    #4 0x55dd65a84b33 in copy_data_between_tables /data/src/11.2/sql/sql_table.cc:11958
    #5 0x55dd65a7e16a in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, Table_specification_st*, TABLE_LIST*, Recreate_info*, Alter_info*, unsigned int, st_order*, bool, bool) /data/src/11.2/sql/sql_table.cc:11194
    #6 0x55dd65c46cbc in Sql_cmd_alter_table::execute(THD*) /data/src/11.2/sql/sql_alter.cc:615
    #7 0x55dd6577a77f in mysql_execute_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:5775
    #8 0x55dd65787670 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /data/src/11.2/sql/sql_parse.cc:7810
    #9 0x55dd6575fa30 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /data/src/11.2/sql/sql_parse.cc:1893
    #10 0x55dd6575c76d in do_command(THD*, bool) /data/src/11.2/sql/sql_parse.cc:1406
    #11 0x55dd65c28b80 in do_handle_one_connection(CONNECT*, bool) /data/src/11.2/sql/sql_connect.cc:1418
    #12 0x55dd65c28541 in handle_one_connection /data/src/11.2/sql/sql_connect.cc:1320
    #13 0x55dd66851d1b in pfs_spawn_thread /data/src/11.2/storage/perfschema/pfs.cc:2201
    #14 0x7f4e760a8043 in start_thread nptl/pthread_create.c:442
 
SUMMARY: AddressSanitizer: 137560 byte(s) leaked in 7 allocation(s).
231027 20:26:05 [ERROR] mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
 
To report this bug, see https://mariadb.com/kb/en/reporting-bugs
 
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed, 
something is definitely wrong and this may fail.
 
Server version: 11.2.2-MariaDB-debug-log source revision: a05b5dd505347e2c8c66d591fe9561a5dca99198
read_buffer_size=131072
max_used_connections=2
thread_count=0
Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0x0 thread_stack 0x100000
sanitizer_common/sanitizer_common_interceptors.inc:4277(__interceptor_backtrace.part.0)[0x7f4e76c51f31]
mysys/stacktrace.c:215(my_print_stacktrace)[0x55dd6744baeb]
sql/signal_handler.cc:241(handle_fatal_signal)[0x55dd660929f9]
libc_sigaction.c:0(__restore_rt)[0x7f4e7605afd0]
nptl/pthread_kill.c:44(__pthread_kill_implementation)[0x7f4e760a9d3c]
posix/raise.c:27(__GI_raise)[0x7f4e7605af32]
stdlib/abort.c:81(__GI_abort)[0x7f4e76045472]
sanitizer_common/sanitizer_posix_libcdep.cpp:137(__sanitizer::Abort())[0x7f4e76cd650f]
sanitizer_common/sanitizer_termination.cpp:59(__sanitizer::Die())[0x7f4e76ce2ba1]
lsan/lsan_common_linux.cpp:120(__lsan::HandleLeaks())[0x7f4e76cea87c]
lsan/lsan_common.cpp:732(__lsan::DoLeakCheck())[0x7f4e76ce8dc5]
stdlib/cxa_finalize.c:84(__cxa_finalize)[0x7f4e7605cf77]
crtstuff.c:0(__do_global_dtors_aux)[0x7f4e76c24bc7]
The manual page at https://mariadb.com/kb/en/how-to-produce-a-full-stack-trace-for-mysqld/ contains
information that should help you find out what is causing the crash.
Writing a core file...
Working directory at /dev/shm/var_auto_6Yod/mysqld.1/data
Resource Limits:
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        unlimited            unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             385706               385706               processes 
Max open files            65536                65536                files     
Max locked memory         12648914944          12648914944          bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       385706               385706               signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        
Core pattern: core
 
Kernel version: Linux version 6.1.0-13-amd64 (debian-kernel@lists.debian.org) (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT_DYNAMIC Debian 6.1.55-1 (2023-09-29)



 Comments   
Comment by Nikita Malyavin [ 2024-01-02 ]

please review commit f6179cc1, branch bb-11.2-nikita

Comment by Sergei Golubchik [ 2024-01-04 ]

f6179cc1 is ok to push

Generated at Thu Feb 08 10:32:41 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.