summaryrefslogtreecommitdiff
path: root/innobase
diff options
context:
space:
mode:
authorVasil Dimov <vasil.dimov@oracle.com>2010-07-07 20:13:53 +0300
committerVasil Dimov <vasil.dimov@oracle.com>2010-07-07 20:13:53 +0300
commit7c6ba7b4dedcfc21a15075d6445bd2f376f1492b (patch)
tree03de3fc8023db16ae3120a955aedfef02b9665e3 /innobase
parent51870d25efa8ac53879f0edbe32729768a851033 (diff)
downloadmariadb-git-7c6ba7b4dedcfc21a15075d6445bd2f376f1492b.tar.gz
Merge the fix for Bug#49238 from SVN
(without the unrelated whitespace changes): ------------------------------------------------------------------------ r7009 | jyang | 2010-04-29 20:44:56 +0300 (Thu, 29 Apr 2010) | 6 lines branches/5.0: Port fix for bug #49238 (Creating/Dropping a temporary table while at 1023 transactions will cause assert) from 5.1 to branches/5.1. Separate action for return value DB_TOO_MANY_CONCURRENT_TRXS from that of DB_MUST_GET_MORE_FILE_SPACE in row_drop_table_for_mysql(). ------------------------------------------------------------------------
Diffstat (limited to 'innobase')
-rw-r--r--innobase/row/row0mysql.c33
1 files changed, 23 insertions, 10 deletions
diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c
index 75c54cec4b3..f636b505b6b 100644
--- a/innobase/row/row0mysql.c
+++ b/innobase/row/row0mysql.c
@@ -3335,20 +3335,13 @@ fputs(" InnoDB: You are trying to drop table ", stderr);
err = trx->error_state;
- if (err != DB_SUCCESS) {
- ut_a(err == DB_OUT_OF_FILE_SPACE);
-
- err = DB_MUST_GET_MORE_FILE_SPACE;
-
- row_mysql_handle_errors(&err, trx, thr, NULL);
-
- ut_error;
- } else {
+ switch (err) {
ibool is_path;
const char* name_or_path;
+ case DB_SUCCESS:
space_id = table->space;
-
+
if (table->dir_path_of_temp_table != NULL) {
dir_path_of_temp_table =
mem_strdup(table->dir_path_of_temp_table);
@@ -3407,7 +3400,27 @@ fputs(" InnoDB: You are trying to drop table ", stderr);
err = DB_ERROR;
}
}
+ break;
+
+ case DB_TOO_MANY_CONCURRENT_TRXS:
+ /* Cannot even find a free slot for the
+ the undo log. We can directly exit here
+ and return the DB_TOO_MANY_CONCURRENT_TRXS
+ error. */
+ break;
+
+ case DB_OUT_OF_FILE_SPACE:
+ err = DB_MUST_GET_MORE_FILE_SPACE;
+
+ row_mysql_handle_errors(&err, trx, thr, NULL);
+
+ /* Fall through to raise error */
+
+ default:
+ /* No other possible error returns */
+ ut_error;
}
+
funct_exit:
trx_commit_for_mysql(trx);