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]
Shane Bester
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.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.077 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.