Commit 5e1c2e36 authored by unknown's avatar unknown
Browse files

Update after merge.

Use mutex when reading prepared_stmt_count global status variable.

Update test case for bug 16365 and bug 23159: add test for
prepared_stmt_count being decreased when some connection that had
prepared statements is closed.


mysql-test/r/ps.result:
  Update result for bug#16365 and bug#23159.
mysql-test/t/ps.test:
  Update test case for bug#16365 and bug#23159: add test for
  prepared_stmt_count being decreased when some connection that had
  prepared statements is closed.
sql/mysqld.cc:
  Use mutex when reading prepared_stmt_count global status variable.
parent 8b4a32af
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -898,6 +898,12 @@ show status like 'prepared_stmt_count';
Variable_name	Value
Prepared_stmt_count	3
deallocate prepare stmt;
select @@max_prepared_stmt_count;
@@max_prepared_stmt_count
3
show status like 'prepared_stmt_count';
Variable_name	Value
Prepared_stmt_count	0
set global max_prepared_stmt_count= @old_max_prepared_stmt_count;
drop table if exists t1;
create temporary table if not exists t1 (a1 int);
+11 −0
Original line number Diff line number Diff line
@@ -950,7 +950,18 @@ select @@max_prepared_stmt_count;
show status like 'prepared_stmt_count';
disconnect con1;
connection default;
# Wait for the connection to die: deal with a possible race
deallocate prepare stmt;
let $query= select variable_value from information_schema.global_status
            where variable_name = 'prepared_stmt_count';
let $count= `$query`;
if ($count)
{
--sleep 1
  let $count= `$query`;
}
select @@max_prepared_stmt_count;
show status like 'prepared_stmt_count';
#
# Restore the old value.
#
+11 −1
Original line number Diff line number Diff line
@@ -6337,6 +6337,16 @@ static int show_open_tables(THD *thd, SHOW_VAR *var, char *buff)
  return 0;
}

static int show_prepared_stmt_count(THD *thd, SHOW_VAR *var, char *buff)
{
  var->type= SHOW_LONG;
  var->value= buff;
  pthread_mutex_lock(&LOCK_prepared_stmt_count);
  *((long *)buff)= (long)prepared_stmt_count;
  pthread_mutex_unlock(&LOCK_prepared_stmt_count);
  return 0;
}

static int show_table_definitions(THD *thd, SHOW_VAR *var, char *buff)
{
  var->type= SHOW_LONG;
@@ -6747,7 +6757,7 @@ SHOW_VAR status_vars[]= {
  {"Open_table_definitions",   (char*) &show_table_definitions, SHOW_FUNC},
  {"Open_tables",              (char*) &show_open_tables,       SHOW_FUNC},
  {"Opened_tables",            (char*) offsetof(STATUS_VAR, opened_tables), SHOW_LONG_STATUS},
  {"Prepared_stmt_count",      (char*) &prepared_stmt_count,    SHOW_LONG_CONST},
  {"Prepared_stmt_count",      (char*) &show_prepared_stmt_count, SHOW_FUNC},
#ifdef HAVE_QUERY_CACHE
  {"Qcache_free_blocks",       (char*) &query_cache.free_memory_blocks, SHOW_LONG_NOFLUSH},
  {"Qcache_free_memory",       (char*) &query_cache.free_memory, SHOW_LONG_NOFLUSH},