diff --git a/mysql-test/main/userstat.result b/mysql-test/main/userstat.result index 07879fc3a0e..64e8d8fb420 100644 --- a/mysql-test/main/userstat.result +++ b/mysql-test/main/userstat.result @@ -287,3 +287,17 @@ test t1 a 8 1 drop table t1; set global userstat=@save_userstat; # End of 11.5 tests +# +# MDEV-34782 SIGSEGV in handler::update_global_table_stats in +# close_thread_table() +# +CREATE TABLE t1 (a CHAR(1)); +HANDLER t1 OPEN; +INSERT INTO t1 VALUES (1); +HANDLER t1 READ NEXT; +a +1 +SET GLOBAL userstat=1; +HANDLER t1 close; +drop table t1; +SET GLOBAL userstat=@save_userstat; diff --git a/mysql-test/main/userstat.test b/mysql-test/main/userstat.test index d0f5499392b..7cf5b7cf9c9 100644 --- a/mysql-test/main/userstat.test +++ b/mysql-test/main/userstat.test @@ -162,3 +162,17 @@ drop table t1; set global userstat=@save_userstat; --echo # End of 11.5 tests + +--echo # +--echo # MDEV-34782 SIGSEGV in handler::update_global_table_stats in +--echo # close_thread_table() +--echo # + +CREATE TABLE t1 (a CHAR(1)); +HANDLER t1 OPEN; +INSERT INTO t1 VALUES (1); +HANDLER t1 READ NEXT; +SET GLOBAL userstat=1; +HANDLER t1 close; +drop table t1; +SET GLOBAL userstat=@save_userstat; diff --git a/sql/handler.cc b/sql/handler.cc index 34c3b775bf3..0361e4c05f8 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -6106,8 +6106,11 @@ void handler::update_global_table_stats() table_stats->rows_stats.deleted+= rows_stats.deleted; table_stats->rows_stats.key_read_hit+= rows_stats.key_read_hit; table_stats->rows_stats.key_read_miss+= rows_stats.key_read_miss; - table_stats->rows_stats.pages_accessed+= handler_stats->pages_accessed; - table_stats->rows_stats.pages_read_count+= handler_stats->pages_read_count; + if (handler_stats) + { + table_stats->rows_stats.pages_accessed+= handler_stats->pages_accessed; + table_stats->rows_stats.pages_read_count+= handler_stats->pages_read_count; + } changed= rows_stats.updated + rows_stats.inserted + rows_stats.deleted; table_stats->rows_changed_x_indexes+= (changed * (table->s->keys ? table->s->keys :