Bug #36135 | void Diagnostics_area::set_eof_status(THD*): Assertion `! is_set()' failed. | ||
---|---|---|---|
Submitted: | 16 Apr 2008 11:56 | Modified: | 16 Sep 2008 4:23 |
Reporter: | Shane Bester (Platinum Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S3 (Non-critical) |
Version: | 5.1-bk6.0.5-bk | OS: | Any |
Assigned to: | Sergey Petrunya | CPU Architecture: | Any |
[16 Apr 2008 11:56]
Shane Bester
[16 Apr 2008 12:47]
MySQL Verification Team
Verified on Suse 10.3 X64: [New Thread 0x49853950 (LWP 6123)] 080416 9:45:56 [Note] Event Scheduler: Loaded 0 events 080416 9:45:56 [Note] /home/miguel/dbs/6.0/libexec/mysqld: ready for connections. Version: '6.0.5-alpha-debug' socket: '/tmp/mysql.sock' port: 3306 Source distribution [New Thread 0x49894950 (LWP 6137)] mysqld: sql_class.cc:431: void Diagnostics_area::set_eof_status(THD*): Assertion `! is_set()' failed. Program received signal SIGABRT, Aborted. [Switching to Thread 0x49894950 (LWP 6137)] 0x00002b106df5db45 in raise () from /lib64/libc.so.6 (gdb) bt full #0 0x00002b106df5db45 in raise () from /lib64/libc.so.6 No symbol table info available. #1 0x00002b106df5f0e0 in abort () from /lib64/libc.so.6 No symbol table info available. #2 0x00002b106df5707f in __assert_fail () from /lib64/libc.so.6 No symbol table info available. #3 0x00000000006feb70 in Diagnostics_area::set_eof_status (this=0x1f11a78, thd=0x1f10478) at sql_class.cc:431 __PRETTY_FUNCTION__ = "void Diagnostics_area::set_eof_status(THD*)" #4 0x0000000000637184 in my_eof (thd=0x1f10478) at ../../sql/sql_class.h:2225 No locals. <cut>
[24 Apr 2008 21:22]
Guilhem Bichot
See also BUG#34417
[28 Apr 2008 7:20]
Sergey Petrunya
Repeatable on 5.1 also. Here is the testcase: create table ten (a int); insert into ten values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); CREATE TABLE one_k ( a int(11) DEFAULT NULL, b int(11) DEFAULT NULL, KEY a (a) ); -- produce numbers 0..999 insert into one_k select A.a+10*(B.a+10*C.a),A.a+10*(B.a+10*C.a) from ten; CREATE TABLE two_a1 ( a int(11) DEFAULT NULL ); INSERT INTO two_a1 VALUES (0),(1); CREATE TABLE two_a2 ( a int(11) DEFAULT NULL ); INSERT INTO two_a2 VALUES (0),(1); CREATE TABLE two_c1 ( a int(11) DEFAULT NULL ); INSERT INTO two_c1 VALUES (0),(1); CREATE TABLE two_c2 ( a int(11) DEFAULT NULL ); INSERT INTO two_c2 VALUES (0),(1),(0),(1); # then run this query select * from two_a1, two_a2 where two_a1.a < 10 and two_a2.a+1 = 2 and two_a2.a in (select one_k.b from one_k where one_k.a+1=one_k.a+1 and one_k.a < (select two_c1.a+10 from two_c1, two_c2 limit 2)); # and you'll get: mysqld: sql_class.cc:430: void Diagnostics_area::set_eof_status(THD*): Assertion `! is_set()' failed. Program received signal SIGABRT, Aborted. [Switching to Thread 0xb4a89b90 (LWP 19217)] 0xffffe410 in __kernel_vsyscall () (gdb) wher #0 0xffffe410 in __kernel_vsyscall () #1 0xb7e27101 in raise () from /lib/libc.so.6 #2 0xb7e288e8 in abort () from /lib/libc.so.6 #3 0xb7e207a5 in __assert_fail () from /lib/libc.so.6 #4 0x082945f1 in Diagnostics_area::set_eof_status (this=0x8ec301c, thd=0x8ec2288) at sql_class.cc:430 #5 0x081de370 in my_eof (thd=0x8ec2288) at sql_class.h:2156 #6 0x0829a3ad in select_send::send_eof (this=0x8eed4d0) at sql_class.cc:1569 #7 0x0832d8ef in do_select (join=0x8eed4e0, fields=0x8ec3678, table=0x0, procedure=0x0) at sql_select.cc:10818 #8 0x08345e1f in JOIN::exec (this=0x8eed4e0) at sql_select.cc:2179 #9 0x083413b4 in mysql_select (thd=0x8ec2288, rref_pointer_array=0x8ec36dc, tables=0x8ef8090, wild_num=1, fields=@0x8ec3678, conds=0x8ef8948, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2147764736, result=0x8eed4d0, unit=0x8ec3374, select_lex=0x8ec35e4) at sql_select.cc:2357 #10 0x08346139 in handle_select (thd=0x8ec2288, lex=0x8ec3318, result=0x8eed4d0, setup_tables_done_option=0) at sql_select.cc:269 #11 0x082c071d in execute_sqlcom_select (thd=0x8ec2288, all_tables=0x8ef8090) at sql_parse.cc:4766 #12 0x082c1e65 in mysql_execute_command (thd=0x8ec2288) at sql_parse.cc:2052 #13 0x082cab3a in mysql_parse (thd=0x8ec2288, inBuf=0x8ef7d50 "select * from two_a1, two_a2 where two_a1.a < 10 and two_a2.a+1 = 2 and two_a2.a in (select one_k.b from one_k", ' ' <repeats 17 times>, "where one_k.a+1=one_k.a+1 and", ' ' <repeats 23 times>, "one_k.a < (s"..., length=280, found_semicolon=0xb4a8925c) at sql_parse.cc:5649 #14 0x082cb6f6 in dispatch_command (command=COM_QUERY, thd=0x8ec2288, packet=0x8eef7c1 "", packet_length=280) at sql_parse.cc:1121 #15 0x082cc852 in do_command (thd=0x8ec2288) at sql_parse.cc:781 #16 0x082b9db5 in handle_one_connection (arg=0x8ec2288) at sql_connect.cc:1115 #17 0xb7fb518b in start_thread () from /lib/libpthread.so.0 #18 0xb7ebf09e in clone () from /lib/libc.so.6 (gdb)
[28 Apr 2008 17:16]
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/commits/46131 ChangeSet@1.2582, 2008-04-28 21:15:30+04:00, sergefp@mysql.com +3 -0 BUG#36135: void Diagnostics_area::set_eof_status(THD*): Assertion `! is_set()' failed. - Before sending EOF, check if we've already sent an error.
[2 May 2008 13:36]
Philip Stoev
See also bug #36473, same assertion, however the patch (manually applied) does not appear to help.
[2 May 2008 19:59]
Sergey Petrunya
Philip, confirm, the fix for this bug cannot be expected to fix BUG#36473. This bugfix fixes a problem in SELECTs, while BUG#36473 uses INSERT. It seems that BUG#36473 is a) either some Falcon-specific problem (some implicit assumption in SE interface that Falcon didn't meet) b) or a problem similar to this bug but in the other part of the code. in any case, I don't think there is a need to merge the two fixes together.
[27 May 2008 9:20]
MySQL Verification Team
this crashes 5.1.26BK with assertion: Assertion failed: ! is_set(), file .\sql_class.cc, line 443 drop table if exists `t3`; drop table if exists `t4`; create table `t3` (`a` int,`b` int) engine=myisam; create table `t4` (`c` varchar(5),`d` int) engine=myisam; insert into t3 values (1,5),(1,1); insert into t4 values ('test',1),('test',1); select `a` from `t3`,`t4` where `a` = (select `d` from `t4`) or `a`= `c` ;
[19 Aug 2008 13:16]
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/commits/51942 2708 Sergey Petrunia 2008-08-19 BUG#36135: void Diagnostics_area::set_eof_status(THD*): Assertion `! is_set()' failed. - Before sending EOF, check if we've already sent an error.
[21 Aug 2008 16:01]
Sergey Petrunya
>> [27 May 11:20] Shane Bester >> this crashes 5.1.26BK with assertion: <skip> This case is fixed too: mysql> select `a` from `t3`,`t4` where `a` = (select `d` from `t4`) or `a`= `c` ; ERROR 1242 (21000): Subquery returns more than 1 row
[25 Aug 2008 10:37]
Georgi Kodinov
Pushed in 5.1.28
[26 Aug 2008 19:36]
Paul DuBois
Noted in 5.1.28 changelog. The server could crash with an assertion failure (or cause the client to get a Packets out of order error) when the expected query result is that it should terminate with a Subquery returns more than 1 row error. Setting report to NDI pending push into 6.0.x.
[14 Sep 2008 0:26]
Bugs System
Pushed into 6.0.7-alpha (revid:sergefp@mysql.com-20080819131529-f2qmxoeego57v1yn) (version source revid:vvaintroub@mysql.com-20080804094710-jb2qpqxpf2ir2gf3) (pib:3)
[16 Sep 2008 4:23]
Paul DuBois
Noted in 6.0.7 changelog.