summaryrefslogtreecommitdiff
path: root/innobase
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2004-10-22 14:59:59 +0300
committerunknown <monty@mysql.com>2004-10-22 14:59:59 +0300
commitcfcca61a177eecacdc2c525c1ba4fea082b1b1c4 (patch)
treef19d6eb75b4b32d78eae19b0cf23620817f6de64 /innobase
parentca8be36f3abc78206bab3810789c4253ee461308 (diff)
parentf18efec55a12da2cd51f9d00f0a57e74f2ad78a2 (diff)
downloadmariadb-git-cfcca61a177eecacdc2c525c1ba4fea082b1b1c4.tar.gz
Merge mysql.com:/home/my/mysql-4.0 into mysql.com:/home/my/mysql-4.1
innobase/os/os0file.c: Auto merged innobase/row/row0ins.c: Auto merged innobase/row/row0mysql.c: Auto merged
Diffstat (limited to 'innobase')
-rw-r--r--innobase/os/os0file.c8
-rw-r--r--innobase/row/row0ins.c17
-rw-r--r--innobase/row/row0mysql.c4
3 files changed, 23 insertions, 6 deletions
diff --git a/innobase/os/os0file.c b/innobase/os/os0file.c
index 3276aaddca2..f2c1a82a995 100644
--- a/innobase/os/os0file.c
+++ b/innobase/os/os0file.c
@@ -1807,7 +1807,7 @@ os_file_pread(
os_file_n_pending_preads++;
os_mutex_exit(os_file_count_mutex);
- n_bytes = pread(file, buf, n, offs);
+ n_bytes = pread(file, buf, (ssize_t)n, offs);
os_mutex_enter(os_file_count_mutex);
os_file_n_pending_preads--;
@@ -1832,7 +1832,7 @@ os_file_pread(
return(ret);
}
- ret = read(file, buf, n);
+ ret = read(file, buf, (ssize_t)n);
os_mutex_exit(os_file_seek_mutexes[i]);
@@ -1882,7 +1882,7 @@ os_file_pwrite(
os_file_n_pending_pwrites++;
os_mutex_exit(os_file_count_mutex);
- ret = pwrite(file, buf, n, offs);
+ ret = pwrite(file, buf, (ssize_t)n, offs);
os_mutex_enter(os_file_count_mutex);
os_file_n_pending_pwrites--;
@@ -1917,7 +1917,7 @@ os_file_pwrite(
return(ret);
}
- ret = write(file, buf, n);
+ ret = write(file, buf, (ssize_t)n);
if (srv_unix_file_flush_method != SRV_UNIX_LITTLESYNC
&& srv_unix_file_flush_method != SRV_UNIX_NOSYNC
diff --git a/innobase/row/row0ins.c b/innobase/row/row0ins.c
index c9c784403c8..c45818ddd26 100644
--- a/innobase/row/row0ins.c
+++ b/innobase/row/row0ins.c
@@ -980,6 +980,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 */
diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c
index ff3b48d03f5..bf4b0f26cbc 100644
--- a/innobase/row/row0mysql.c
+++ b/innobase/row/row0mysql.c
@@ -2479,8 +2479,8 @@ row_drop_table_for_mysql(
fputs(" InnoDB: You are trying to drop table ", stderr);
ut_print_name(stderr, trx, table->name);
fputs("\n"
- "InnoDB: though there are foreign key check running on it.\n"
- "InnoDB: Adding the table to the background drop queue.\n",
+ "InnoDB: though there is a foreign key check running on it.\n"
+ "InnoDB: Adding the table to the background drop queue.\n",
stderr);
row_add_table_to_background_drop_list(table);