diff options
author | unknown <heikki@hundin.mysql.fi> | 2004-10-22 00:25:57 +0300 |
---|---|---|
committer | unknown <heikki@hundin.mysql.fi> | 2004-10-22 00:25:57 +0300 |
commit | 4f84f90f96b037a5afee1011c8d4c1fd42df74a3 (patch) | |
tree | cdebd62a041a8e415e6404e85f86e9b33e42e4f9 /innobase/row/row0ins.c | |
parent | ec8779e95a46b3dfff492196ad004cb2716df3c3 (diff) | |
download | mariadb-git-4f84f90f96b037a5afee1011c8d4c1fd42df74a3.tar.gz |
row0mysql.c, row0ins.c:
Fix bug #5961: release the dictionary latch during a long cascaded FOREIGN KEY operation, so that we do not starve other users
innobase/row/row0ins.c:
Fix bug #5961: release the dictionary latch during a long cascaded FOREIGN KEY operation, so that we do not starve other users
innobase/row/row0mysql.c:
Fix bug #5961: release the dictionary latch during a long cascaded FOREIGN KEY operation, so that we do not starve other users
Diffstat (limited to 'innobase/row/row0ins.c')
-rw-r--r-- | innobase/row/row0ins.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/innobase/row/row0ins.c b/innobase/row/row0ins.c index 458970da4e2..b9f860903cb 100644 --- a/innobase/row/row0ins.c +++ b/innobase/row/row0ins.c @@ -966,6 +966,23 @@ row_ins_foreign_check_on_constraint( err = row_update_cascade_for_mysql(thr, cascade, foreign->foreign_table); + + if (foreign->foreign_table->n_foreign_key_checks_running == 0) { + fprintf(stderr, +"InnoDB: error: table %s has the counter 0 though there is\n" +"InnoDB: a FOREIGN KEY check running on it.\n", + foreign->foreign_table->name); + } + + /* Release the data dictionary latch for a while, so that we do not + starve other threads from doing CREATE TABLE etc. if we have a huge + cascaded operation running. The counter n_foreign_key_checks_running + will prevent other users from dropping or ALTERing the table when we + release the latch. */ + + row_mysql_unfreeze_data_dictionary(thr_get_trx(thr)); + row_mysql_freeze_data_dictionary(thr_get_trx(thr)); + mtr_start(mtr); /* Restore pcur position */ |