1
0
mirror of https://github.com/MariaDB/server.git synced 2026-01-06 05:22:24 +03:00

Fix race condition in ANALYZE TABLE.

Fixed bug where one got an empty set instead of a DEADLOCK error when using BDB tables.


Docs/manual.texi:
  Cleanup
configure.in:
  Version number change
mysql-test/t/backup.test:
  drop used tables
mysql-test/t/bdb-crash.test:
  cleanup
mysys/thr_lock.c:
  cleanup
sql/mysqld.cc:
  safety fix
sql/records.cc:
  Fixed bug where one got an empty set instead of a DEADLOCK error when using
  BDB tables.
sql/sql_table.cc:
  Fix race  condition in ANALYZE TABLE.
This commit is contained in:
unknown
2001-11-26 02:16:38 +02:00
parent 7ef7d93726
commit 4615e50093
10 changed files with 121 additions and 24 deletions

View File

@@ -964,9 +964,11 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
}
/* Close all instances of the table to allow repair to rename files */
if (open_for_modify && table->table->version)
if (lock_type == TL_WRITE && table->table->version)
{
pthread_mutex_lock(&LOCK_open);
const char *old_message=thd->enter_cond(&COND_refresh, &LOCK_open,
"Waiting to get writelock");
mysql_lock_abort(thd,table->table);
while (remove_table_from_cache(thd, table->table->table_cache_key,
table->table->real_name) &&
@@ -976,6 +978,7 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
(void) pthread_cond_wait(&COND_refresh,&LOCK_open);
dropping_tables--;
}
thd->exit_cond(old_message);
pthread_mutex_unlock(&LOCK_open);
if (thd->killed)
goto err;