Fix bug #13424 locking view with query cache enabled crashes server
For LOCK view is opened but not prepared thus leaving 'table' field set to NULL. invalidate_locked_for_write() wasn't checking that and call to invalidate_table(NULL) crashes server. To invalidate_locked_for_write() added check that ensures that table is completely opened.
This commit is contained in:
parent
099c25e146
commit
0032165acf
@ -123,4 +123,13 @@ select * from v3;
|
|||||||
a b
|
a b
|
||||||
drop view v3;
|
drop view v3;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
create table t1(f1 int);
|
||||||
|
insert into t1 values(1),(2),(3);
|
||||||
|
create view v1 as select * from t1;
|
||||||
|
set query_cache_wlock_invalidate=1;
|
||||||
|
lock tables v1 read /*!32311 local */;
|
||||||
|
unlock tables;
|
||||||
|
set query_cache_wlock_invalidate=default;
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
set GLOBAL query_cache_size=default;
|
set GLOBAL query_cache_size=default;
|
||||||
|
@ -84,4 +84,16 @@ select * from v3;
|
|||||||
drop view v3;
|
drop view v3;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #13424 locking view with query cache enabled crashes server
|
||||||
|
#
|
||||||
|
create table t1(f1 int);
|
||||||
|
insert into t1 values(1),(2),(3);
|
||||||
|
create view v1 as select * from t1;
|
||||||
|
set query_cache_wlock_invalidate=1;
|
||||||
|
lock tables v1 read /*!32311 local */;
|
||||||
|
unlock tables;
|
||||||
|
set query_cache_wlock_invalidate=default;
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
set GLOBAL query_cache_size=default;
|
set GLOBAL query_cache_size=default;
|
||||||
|
@ -1295,7 +1295,8 @@ void Query_cache::invalidate_locked_for_write(TABLE_LIST *tables_used)
|
|||||||
DUMP(this);
|
DUMP(this);
|
||||||
for (; tables_used; tables_used= tables_used->next_local)
|
for (; tables_used; tables_used= tables_used->next_local)
|
||||||
{
|
{
|
||||||
if (tables_used->lock_type & (TL_WRITE_LOW_PRIORITY | TL_WRITE))
|
if (tables_used->lock_type & (TL_WRITE_LOW_PRIORITY | TL_WRITE) &&
|
||||||
|
tables_used->table)
|
||||||
invalidate_table(tables_used->table);
|
invalidate_table(tables_used->table);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user