[MDEV-17711] Assertion `arena_for_set_stmt== 0' failed in LEX::set_arena_for_set_stmt upon SET STATEMENT Created: 2018-11-14  Updated: 2023-09-25  Resolved: 2023-09-07

Status: Closed
Project: MariaDB Server
Component/s: Admin statements
Affects Version/s: 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10
Fix Version/s: 10.4.32, 10.5.23, 10.6.16, 10.10.7, 10.11.6, 11.0.4, 11.1.3

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Duplicate
is duplicated by MDEV-31160 multiple use of "SET STATEMENT sql_se... Closed
is duplicated by MDEV-31485 SIGSEGV in PROF_MEASUREMENT::~PROF_ME... Stalled

 Description   

CREATE TABLE t1 (a INT);
CREATE PROCEDURE sp() BEGIN END;
--delimiter $
CREATE EVENT ev ON SCHEDULE EVERY 1 SECOND 
DO 
  CALL sp;
  ALTER TABLE t1 NOWAIT;
  SET STATEMENT lock_wait_timeout=1 FOR ALTER TABLE t1 ADD b INT
$
--delimiter ;
 
# Cleanup
DROP EVENT ev;
DROP PROCEDURE sp;
DROP TABLE t1;

10.3 e1dc05a69

mysqld: /data/src/10.3/sql/sql_lex.cc:4926: bool LEX::set_arena_for_set_stmt(Query_arena*): Assertion `arena_for_set_stmt== 0' failed.
181114 13:31:22 [ERROR] mysqld got signal 6 ;
 
#7  0x00007fbe97844ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
#8  0x000056302da982d8 in LEX::set_arena_for_set_stmt (this=0x7fbe800048e8, backup=0x7fbe919ea6d0) at /data/src/10.3/sql/sql_lex.cc:4926
#9  0x000056302dabd05e in mysql_execute_command (thd=0x7fbe80000b00) at /data/src/10.3/sql/sql_parse.cc:3481
#10 0x000056302dacba09 in mysql_parse (thd=0x7fbe80000b00, rawbuf=0x7fbe80014d28 "SET STATEMENT lock_wait_timeout=1 FOR ALTER TABLE t1 ADD b INT", length=62, parser_state=0x7fbe919eb5f0, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:8090
#11 0x000056302dab9081 in dispatch_command (command=COM_QUERY, thd=0x7fbe80000b00, packet=0x7fbe8000b1e1 "", packet_length=143, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1940
#12 0x000056302dab75f3 in do_command (thd=0x7fbe80000b00) at /data/src/10.3/sql/sql_parse.cc:1395
#13 0x000056302dc1f07a in do_handle_one_connection (connect=0x5630315fdb30) at /data/src/10.3/sql/sql_connect.cc:1402
#14 0x000056302dc1edfe in handle_one_connection (arg=0x5630315fdb30) at /data/src/10.3/sql/sql_connect.cc:1308
#15 0x000056302e0b3053 in pfs_spawn_thread (arg=0x563031611490) at /data/src/10.3/storage/perfschema/pfs.cc:1862
#16 0x00007fbe99300494 in start_thread (arg=0x7fbe919ec700) at pthread_create.c:333
#17 0x00007fbe9790193f in clone () from /lib/x86_64-linux-gnu/libc.so.6

No visible effect on non-debug builds.
The test case is not applicable to 10.2 and earlier, because they don't have NOWAIT, and I don't know what it could be replaced with to keep the test failing.



 Comments   
Comment by Oleksandr Byelkin [ 2018-12-24 ]

problem connected to NOWAIT.

Comment by Elena Stepanova [ 2022-07-19 ]

A much simpler test case with the same outcome:

--delimiter $$
SET STATEMENT lock_wait_timeout=3 FOR SELECT 1;
SET STATEMENT lock_wait_timeout=3 FOR SELECT 2 $$
--delimiter ;

10.3 18488048

mysqld: /data/src/10.3/sql/sql_lex.cc:5042: bool LEX::set_arena_for_set_stmt(Query_arena*): Assertion `arena_for_set_stmt== 0' failed.
220720  0:42:03 [ERROR] mysqld got signal 6 ;
 
#6  0x00007fe09f32540f in __assert_fail_base (fmt=0x7fe09f48e128 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x563eb73cee57 "arena_for_set_stmt== 0", file=0x563eb73cdcac "/data/src/10.3/sql/sql_lex.cc", line=5042, function=<optimized out>) at assert.c:92
#7  0x00007fe09f334662 in __GI___assert_fail (assertion=0x563eb73cee57 "arena_for_set_stmt== 0", file=0x563eb73cdcac "/data/src/10.3/sql/sql_lex.cc", line=5042, function=0x563eb73cee70 "bool LEX::set_arena_for_set_stmt(Query_arena*)") at assert.c:101
#8  0x0000563eb67728d2 in LEX::set_arena_for_set_stmt (this=0x7fe088004b80, backup=0x7fe09935ac30) at /data/src/10.3/sql/sql_lex.cc:5042
#9  0x0000563eb6798b91 in run_set_statement_if_requested (thd=0x7fe088000d90, lex=0x7fe088004b80) at /data/src/10.3/sql/sql_parse.cc:3294
#10 0x0000563eb679a0c3 in mysql_execute_command (thd=0x7fe088000d90) at /data/src/10.3/sql/sql_parse.cc:3684
#11 0x0000563eb67a81aa in mysql_parse (thd=0x7fe088000d90, rawbuf=0x7fe088012c50 "SET STATEMENT lock_wait_timeout=3 FOR SELECT 2", length=46, parser_state=0x7fe09935b5b0, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:7870
#12 0x0000563eb6794f06 in dispatch_command (command=COM_QUERY, thd=0x7fe088000d90, packet=0x7fe088008f31 "", packet_length=95, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1941
#13 0x0000563eb679339d in do_command (thd=0x7fe088000d90) at /data/src/10.3/sql/sql_parse.cc:1398
#14 0x0000563eb6910956 in do_handle_one_connection (connect=0x563eba6d6a10) at /data/src/10.3/sql/sql_connect.cc:1403
#15 0x0000563eb69106c1 in handle_one_connection (arg=0x563eba6d6a10) at /data/src/10.3/sql/sql_connect.cc:1308
#16 0x0000563eb72bfdd0 in pfs_spawn_thread (arg=0x563eba639a70) at /data/src/10.3/storage/perfschema/pfs.cc:1869
#17 0x00007fe09f4cdea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#18 0x00007fe09f3fddef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

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