diff options
author | Sergei Golubchik <sergii@pisem.net> | 2013-04-04 11:05:04 +0200 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2013-04-04 11:05:04 +0200 |
commit | 33f3c93e6feb9550e465b2373c2ba24fa65a4967 (patch) | |
tree | 8c451d5168d697337c7e94b6ba99b9056a6b8935 | |
parent | 2901497b187ffcefbec73c4ac9b5270174e8682c (diff) | |
download | mariadb-git-33f3c93e6feb9550e465b2373c2ba24fa65a4967.tar.gz |
MDEV-4161 Assertion `status_var.memory_used == 0' fails in virtual THD::~THD()
init join->top_join_tab_count to be in sync with join->join_tab=stat,
otherwise a query can be killed in-between and join_tab's won't be deleted
(JOIN::cleanup won't call JOIN_TAB::cleanup)
-rw-r--r-- | mysql-test/r/quick_select_4161.result | 31 | ||||
-rw-r--r-- | mysql-test/r/windows.result | 2 | ||||
-rw-r--r-- | mysql-test/t/quick_select_4161.test | 53 | ||||
-rw-r--r-- | sql/sql_select.cc | 3 |
4 files changed, 88 insertions, 1 deletions
diff --git a/mysql-test/r/quick_select_4161.result b/mysql-test/r/quick_select_4161.result new file mode 100644 index 00000000000..862be6055ce --- /dev/null +++ b/mysql-test/r/quick_select_4161.result @@ -0,0 +1,31 @@ +CREATE TABLE t1 ( +event_date date DEFAULT '0000-00-00' NOT NULL, +type int(11) DEFAULT '0' NOT NULL, +event_id int(11) DEFAULT '0' NOT NULL, +PRIMARY KEY (event_date,type,event_id) +); +INSERT INTO t1 VALUES ('1999-07-10',100100,24), ('1999-07-11',100100,25), +('1999-07-13',100600,0), ('1999-07-13',100600,4), ('1999-07-13',100600,26), +('1999-07-14',100600,10), ('1999-07-15',100600,16), ('1999-07-15',100800,45), +('1999-07-15',101000,47), ('1999-07-16',100800,46), ('1999-07-20',100600,5), +('1999-07-20',100600,27), ('1999-07-21',100600,11), ('1999-07-22',100600,17), +('1999-07-23',100100,39), ('1999-07-24',100100,39), ('1999-07-24',100500,40), +('1999-07-25',100100,39), ('1999-07-27',100600,1), ('1999-07-27',100600,6), +('1999-07-27',100600,28), ('1999-07-28',100600,12), ('1999-07-29',100500,41), +('1999-07-29',100600,18), ('1999-07-30',100500,41), ('1999-07-31',100500,41), +('1999-08-01',100700,34), ('1999-08-03',100600,7), ('1999-08-03',100600,29), +('1999-08-04',100600,13), ('1999-08-05',100500,42), ('1999-08-05',100600,19), +('1999-08-06',100500,42), ('1999-08-07',100500,42), ('1999-08-08',100500,42), +('1999-08-10',100600,2), ('1999-08-10',100600,9), ('1999-08-10',100600,30), +('1999-08-11',100600,14), ('1999-08-12',100600,20), ('1999-08-17',100500,8), +('1999-08-17',100600,31), ('1999-08-18',100600,15), ('1999-08-19',100600,22), +('1999-08-24',100600,3), ('1999-08-24',100600,32), ('1999-08-27',100500,43), +('1999-08-31',100600,33), ('1999-09-17',100100,37), ('1999-09-18',100100,37), +('1999-09-19',100100,37), ('2000-12-18',100700,38); +set debug_sync='inside_make_join_statistics signal killme wait_for done'; +select event_date,type,event_id from t1 WHERE event_date >= "1999-07-01" AND event_date < "1999-07-15" AND (type=100600 OR type=100100) ORDER BY event_date; +set debug_sync='now wait_for killme'; +kill %connection%; +set debug_sync='now signal done'; +Got one of the listed errors +drop table t1; diff --git a/mysql-test/r/windows.result b/mysql-test/r/windows.result index dc624a07f4f..d0cdd858d4a 100644 --- a/mysql-test/r/windows.result +++ b/mysql-test/r/windows.result @@ -16,7 +16,7 @@ CREATE TABLE t1 (a int, b int); INSERT INTO t1 VALUES (1,1); EXPLAIN SELECT * FROM t1 WHERE b = (SELECT max(2)); id select_type table type possible_keys key key_len ref rows Extra -1 PRIMARY t1 system NULL NULL NULL NULL 1 +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables 2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used DROP TABLE t1; CREATE DATABASE `TESTDB`; diff --git a/mysql-test/t/quick_select_4161.test b/mysql-test/t/quick_select_4161.test new file mode 100644 index 00000000000..1e746754b41 --- /dev/null +++ b/mysql-test/t/quick_select_4161.test @@ -0,0 +1,53 @@ +# +# MDEV-4161 Assertion `status_var.memory_used == 0' fails in virtual THD::~THD() +# +--source include/have_debug_sync.inc + +CREATE TABLE t1 ( + event_date date DEFAULT '0000-00-00' NOT NULL, + type int(11) DEFAULT '0' NOT NULL, + event_id int(11) DEFAULT '0' NOT NULL, + PRIMARY KEY (event_date,type,event_id) +); + +INSERT INTO t1 VALUES ('1999-07-10',100100,24), ('1999-07-11',100100,25), +('1999-07-13',100600,0), ('1999-07-13',100600,4), ('1999-07-13',100600,26), +('1999-07-14',100600,10), ('1999-07-15',100600,16), ('1999-07-15',100800,45), +('1999-07-15',101000,47), ('1999-07-16',100800,46), ('1999-07-20',100600,5), +('1999-07-20',100600,27), ('1999-07-21',100600,11), ('1999-07-22',100600,17), +('1999-07-23',100100,39), ('1999-07-24',100100,39), ('1999-07-24',100500,40), +('1999-07-25',100100,39), ('1999-07-27',100600,1), ('1999-07-27',100600,6), +('1999-07-27',100600,28), ('1999-07-28',100600,12), ('1999-07-29',100500,41), +('1999-07-29',100600,18), ('1999-07-30',100500,41), ('1999-07-31',100500,41), +('1999-08-01',100700,34), ('1999-08-03',100600,7), ('1999-08-03',100600,29), +('1999-08-04',100600,13), ('1999-08-05',100500,42), ('1999-08-05',100600,19), +('1999-08-06',100500,42), ('1999-08-07',100500,42), ('1999-08-08',100500,42), +('1999-08-10',100600,2), ('1999-08-10',100600,9), ('1999-08-10',100600,30), +('1999-08-11',100600,14), ('1999-08-12',100600,20), ('1999-08-17',100500,8), +('1999-08-17',100600,31), ('1999-08-18',100600,15), ('1999-08-19',100600,22), +('1999-08-24',100600,3), ('1999-08-24',100600,32), ('1999-08-27',100500,43), +('1999-08-31',100600,33), ('1999-09-17',100100,37), ('1999-09-18',100100,37), +('1999-09-19',100100,37), ('2000-12-18',100700,38); + +connect (killee, localhost, root); + +let $id=`select connection_id()`; + +set debug_sync='inside_make_join_statistics signal killme wait_for done'; +send select event_date,type,event_id from t1 WHERE event_date >= "1999-07-01" AND event_date < "1999-07-15" AND (type=100600 OR type=100100) ORDER BY event_date; + +connection default; +set debug_sync='now wait_for killme'; +--replace_result $id %connection% +eval kill $id; +set debug_sync='now signal done'; + +connection killee; +--error 1053,1927,2006,2013 +reap; + +connection default; +disconnect killee; + +drop table t1; + diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c84c4156d2a..5eb182b32f4 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -3682,6 +3682,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list, DBUG_RETURN(TRUE); join->join_tab=stat; + join->top_join_tab_count= table_count; join->map2table=stat_ref; join->table= table_vector; join->const_tables=const_count; @@ -3729,6 +3730,8 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list, if (join->choose_subquery_plan(all_table_map & ~join->const_table_map)) goto error; + DEBUG_SYNC(join->thd, "inside_make_join_statistics"); + /* Generate an execution plan from the found optimal join order. */ DBUG_RETURN(join->thd->killed || get_best_combination(join)); |