Bug #12704 Server crashes during trigger execution
| Submitted: | 21 Aug 2005 17:15 | Modified: | 15 Sep 2005 17:27 |
|---|---|---|---|
| Reporter: | Alexey Stroganov | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S2 (Serious) |
| Version: | the latest 5.0.13pre | OS: | Linux (Linux) |
| Assigned to: | Dmitry Lenev | CPU Architecture: | Any |
[24 Aug 2005 22:08]
Alexey Stroganov
During further testing I found that several similar test cases lead to crashes of server in many various places. Below is backtrace for one that have load data infile instead of insert:
0x0810d419 in Item_trigger_field::fix_fields (this=0x8cadcd0, thd=0x4292dcb8, items=0x0)
at item.cc:5025
5025 field= (row_version == OLD_ROW) ? triggers->old_field[field_idx] :
(gdb) bt
#0 0x0810d419 in Item_trigger_field::fix_fields (this=0x8cadcd0, thd=0x4292dcb8, items=0x0)
at item.cc:5025
#1 0x082e44cc in sp_instr_set_trigger_field::exec_core (this=0x8cadd68, thd=0x4292dcb8,
nextp=0x42cab580) at sp_head.cc:1740
#2 0x082e3f30 in sp_lex_keeper::reset_lex_and_exec_core (this=0x8cadd90, thd=0x4292dcb8,
nextp=0x42cab580, open_tables=true, instr=0x8cadd68) at sp_head.cc:1586
#3 0x082e446c in sp_instr_set_trigger_field::execute (this=0x8cadd68, thd=0x4292dcb8,
nextp=0x42cab580) at sp_head.cc:1731
#4 0x082e1a6d in sp_head::execute (this=0x8cad4f8, thd=0x4292dcb8) at sp_head.cc:715
#5 0x082e20bf in sp_head::execute_function (this=0x8cad4f8, thd=0x4292dcb8, argp=0x0,
argcount=0, resp=0x0) at sp_head.cc:858
#6 0x082f0bd6 in Table_triggers_list::process_triggers (this=0x8c827f0, thd=0x4292dcb8,
event=TRG_EVENT_INSERT, time_type=TRG_ACTION_BEFORE, old_row_is_record1=true)
at sql_trigger.cc:902
#7 0x081dce01 in fill_record_n_invoke_before_triggers (thd=0x4292dcb8, fields=@0x4292e140,
values=@0x4292e134, ignore_errors=false, triggers=0x8c827f0, event=TRG_EVENT_INSERT)
at sql_base.cc:4679
#8 0x082906ef in read_sep_field (thd=0x4292dcb8, info=@0x42cab9b0, table_list=0x8c98560,
fields_vars=@0x4292e128, set_fields=@0x4292e140, set_values=@0x4292e134,
read_info=@0x42cab880, enclosed=@0x86015c0, skip_lines=0,
ignore_check_option_errors=false) at sql_load.cc:743
#9 0x0828f898 in mysql_load (thd=0x4292dcb8, ex=0x8c98518, table_list=0x8c98560,
fields_vars=@0x4292e128, set_fields=@0x4292e140, set_values=@0x4292e134,
handle_duplicates=DUP_ERROR, ignore=false, read_file_from_client=false) at sql_load.cc:370
#10 0x081ad5b2 in mysql_execute_command (thd=0x4292dcb8) at sql_parse.cc:3462
#11 0x081b3269 in mysql_parse (thd=0x4292dcb8,
inBuf=0x8c98368 "load data infile '/data0/ranger/stress/mysql-test//suite/funcs_1/data/myisam_tb3.txt' into table tb3", length=100) at sql_parse.cc:5445
#12 0x081a8859 in dispatch_command (command=COM_QUERY, thd=0x4292dcb8,
packet=0x42968319 "load data infile '/data0/ranger/stress/mysql-test//suite/funcs_1/data/myisam_tb3.txt' into table tb3 ", packet_length=102) at sql_parse.cc:1665
#13 0x081a8026 in do_command (thd=0x4292dcb8) at sql_parse.cc:1464
#14 0x081a7106 in handle_one_connection (arg=0x4292dcb8) at sql_parse.cc:1116
#15 0x4004aaa7 in start_thread () from /lib/tls/libpthread.so.0
#16 0x4017bc2e in clone () from /lib/tls/libc.so.6
Also I would note that problems above arised only for trigger with BEFORE INSERT clause. For other clauses test cases passed ok for me.
[13 Sep 2005 22:26]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/29773
[14 Sep 2005 17:47]
Michael Widenius
Patch approved. Ok to push after some minor changes is done (as dicussed on IRC)
[14 Sep 2005 23:55]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/29874
[15 Sep 2005 1:10]
Dmitry Lenev
Fixed in 5.0.13 Simultaneous execution of DML statements and CREATE TRIGGER/DROP TRIGGER statements on the same table may cause crashes or errors.
[15 Sep 2005 17:27]
Paul DuBois
Noted in 5.0.13 changelog.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.058 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: Running following test case in multithread environment(stress test) for some time (less than 1-2 min) will lead to crash: --disable_warnings drop table if exists t1; --enable_warnings create table t1 (f59 INT) ; CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1 ; insert into t1 values (1); I got two different backtraces for this issue: #1: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 1119230896 (LWP 25685)] 0x0826fb7d in ha_myisam::write_row (this=0x8c58f70, buf=0x8c59050 "Щ\001") at ha_myisam.cc:297 297 statistic_increment(table->in_use->status_var.ha_write_count,&LOCK_status); (gdb) bt #0 0x0826fb7d in ha_myisam::write_row (this=0x8c58f70, buf=0x8c59050 "Щ\001") at ha_myisam.cc:297 #1 0x0820c08e in write_record (thd=0x42a44ea0, table=0x8c7d4c8, info=0x42b60a30) at sql_insert.cc:1144 #2 0x0820a8d7 in mysql_insert (thd=0x42a44ea0, table_list=0x8c9a060, fields=@0x42a45310, values_list=@0x42a45334, update_fields=@0x42a45328, update_values=@0x42a4531c, duplic=DUP_ERROR, ignore=false) at sql_insert.cc:530 #3 0x081acaf3 in mysql_execute_command (thd=0x42a44ea0) at sql_parse.cc:3229 #4 0x081b3235 in mysql_parse (thd=0x42a44ea0, inBuf=0x8c99fe8 "insert into t1 values (1)", length=25) at sql_parse.cc:5439 #5 0x081a8825 in dispatch_command (command=COM_QUERY, thd=0x42a44ea0, packet=0x42a4eeb1 "insert into t1 values (1)", packet_length=26) at sql_parse.cc:1659 #6 0x081a7ff2 in do_command (thd=0x42a44ea0) at sql_parse.cc:1458 #7 0x081a70d2 in handle_one_connection (arg=0x42a44ea0) at sql_parse.cc:1111 #8 0x4004aaa7 in start_thread () from /lib/tls/libpthread.so.0 #9 0x4017bc2e in clone () from /lib/tls/libc.so.6 #2: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 1116535728 (LWP 17740)] 0x081a7830 in cleanup_items (item=0x8f8f8f8f) at sql_parse.cc:1272 1272 item->cleanup(); (gdb) bt #0 0x081a7830 in cleanup_items (item=0x8f8f8f8f) at sql_parse.cc:1272 #1 0x082e1adc in sp_head::execute (this=0x8c89578, thd=0x42959a78) at sp_head.cc:732 #2 0x082e2114 in sp_head::execute_function (this=0x8c89578, thd=0x42959a78, argp=0x0, argcount=0, resp=0x0) at sp_head.cc:864 #3 0x082f0b9e in Table_triggers_list::process_triggers (this=0x8d829c0, thd=0x42959a78, event=TRG_EVENT_INSERT, time_type=TRG_ACTION_BEFORE, old_row_is_record1=true) at sql_trigger.cc:902 #4 0x081dcf63 in fill_record_n_invoke_before_triggers (thd=0x42959a78, ptr=0x8d828b8, values=@0x8ce4788, ignore_errors=false, triggers=0x8d829c0, event=TRG_EVENT_INSERT) at sql_base.cc:4764 #5 0x0820a7d3 in mysql_insert (thd=0x42959a78, table_list=0x8ce4620, fields=@0x42959ee8, values_list=@0x42959f0c, update_fields=@0x42959f00, update_values=@0x42959ef4, duplic=DUP_ERROR, ignore=false) at sql_insert.cc:497 #6 0x081acaf3 in mysql_execute_command (thd=0x42959a78) at sql_parse.cc:3229 #7 0x081b3235 in mysql_parse (thd=0x42959a78, inBuf=0x8ce45a8 "insert into t1 values (1)", length=25) at sql_parse.cc:5439 #8 0x081a8825 in dispatch_command (command=COM_QUERY, thd=0x42959a78, packet=0x42900489 "insert into t1 values (1)", packet_length=26) at sql_parse.cc:1659 #9 0x081a7ff2 in do_command (thd=0x42959a78) at sql_parse.cc:1458 #10 0x081a70d2 in handle_one_connection (arg=0x42959a78) at sql_parse.cc:1111 #11 0x4004aaa7 in start_thread () from /lib/tls/libpthread.so.0 #12 0x4017bc2e in clone () from /lib/tls/libc.so.6 How to repeat: Run stress test with test case above. Until stress test will be integrated to regular mysql-test suite please contact me and I will provide all necessary information.