diff options
author | Marko Makela <mmakela@bk-internal.mysql.com> | 2010-10-11 21:28:51 +0200 |
---|---|---|
committer | Marko Makela <mmakela@bk-internal.mysql.com> | 2010-10-11 21:28:51 +0200 |
commit | bda9e4570b4edf13949560484bd2b994241cfd48 (patch) | |
tree | 0e1a2cec61b9d8f67c48b8b994952d82d84c10ff /storage/innodb_plugin | |
parent | a8da1a3a581a3572edf165ffe1076b0194195a18 (diff) | |
parent | 820e1bc6f400517e72ae4f142dbe5da54d5ef03c (diff) | |
download | mariadb-git-bda9e4570b4edf13949560484bd2b994241cfd48.tar.gz |
Merge Bug #57345, Bug #56982, Bug#53307 test from mysql-5.1-innodb
Diffstat (limited to 'storage/innodb_plugin')
-rw-r--r-- | storage/innodb_plugin/ChangeLog | 6 | ||||
-rw-r--r-- | storage/innodb_plugin/handler/ha_innodb.cc | 6 | ||||
-rw-r--r-- | storage/innodb_plugin/row/row0sel.c | 14 |
3 files changed, 24 insertions, 2 deletions
diff --git a/storage/innodb_plugin/ChangeLog b/storage/innodb_plugin/ChangeLog index ca7900549c2..f0dfe1ff6cc 100644 --- a/storage/innodb_plugin/ChangeLog +++ b/storage/innodb_plugin/ChangeLog @@ -1,5 +1,11 @@ 2010-10-11 The InnoDB Team + * row/row0sel.c + Fix Bug #57345 btr_pcur_store_position abort for load with + concurrent lock/unlock tables + +2010-10-11 The InnoDB Team + * row/row0mysql.c, innodb_bug56947.result, innodb_bug56947.test: Fix Bug #56947 InnoDB leaks memory when failing to create a table diff --git a/storage/innodb_plugin/handler/ha_innodb.cc b/storage/innodb_plugin/handler/ha_innodb.cc index 990d99b9cf4..350eb8ae026 100644 --- a/storage/innodb_plugin/handler/ha_innodb.cc +++ b/storage/innodb_plugin/handler/ha_innodb.cc @@ -9409,7 +9409,11 @@ ha_innobase::innobase_peek_autoinc(void) auto_inc = dict_table_autoinc_read(innodb_table); - ut_a(auto_inc > 0); + if (auto_inc == 0) { + ut_print_timestamp(stderr); + fprintf(stderr, " InnoDB: AUTOINC next value generation " + "is disabled for '%s'\n", innodb_table->name); + } dict_table_autoinc_unlock(innodb_table); diff --git a/storage/innodb_plugin/row/row0sel.c b/storage/innodb_plugin/row/row0sel.c index 8b17bdc6ad3..cc7a7a6fe9b 100644 --- a/storage/innodb_plugin/row/row0sel.c +++ b/storage/innodb_plugin/row/row0sel.c @@ -3356,6 +3356,7 @@ row_search_for_mysql( mem_heap_t* heap = NULL; ulint offsets_[REC_OFFS_NORMAL_SIZE]; ulint* offsets = offsets_; + ibool table_lock_waited = FALSE; rec_offs_init(offsets_); @@ -3742,13 +3743,15 @@ release_search_latch_if_needed: trx_assign_read_view(trx); prebuilt->sql_stat_start = FALSE; } else { +wait_table_again: err = lock_table(0, index->table, prebuilt->select_lock_type == LOCK_S ? LOCK_IS : LOCK_IX, thr); if (err != DB_SUCCESS) { - goto lock_wait_or_error; + table_lock_waited = TRUE; + goto lock_table_wait; } prebuilt->sql_stat_start = FALSE; } @@ -4559,6 +4562,7 @@ lock_wait_or_error: btr_pcur_store_position(pcur, &mtr); +lock_table_wait: mtr_commit(&mtr); mtr_has_extra_clust_latch = FALSE; @@ -4576,6 +4580,14 @@ lock_wait_or_error: thr->lock_state = QUE_THR_LOCK_NOLOCK; mtr_start(&mtr); + /* Table lock waited, go try to obtain table lock + again */ + if (table_lock_waited) { + table_lock_waited = FALSE; + + goto wait_table_again; + } + sel_restore_position_for_mysql(&same_user_rec, BTR_SEARCH_LEAF, pcur, moves_up, &mtr); |