summaryrefslogtreecommitdiff
path: root/storage/xtradb/dict/dict0mem.cc
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2014-05-06 10:21:34 +0200
committerSergei Golubchik <sergii@pisem.net>2014-05-06 10:21:34 +0200
commitb968363aac2bf75d014482f8405e6a9fed73ccd6 (patch)
tree7f2aa9432e293ffe4dfcc772c06991d0b604ca24 /storage/xtradb/dict/dict0mem.cc
parente2e5d07b2807706fb9187f00c049474a01ab15da (diff)
parent05fd3e63665597d3bcdf1094bb111df014087936 (diff)
downloadmariadb-git-b968363aac2bf75d014482f8405e6a9fed73ccd6.tar.gz
MDEV-6184 10.0.11 merge
XtraDB 5.6.16-64.2
Diffstat (limited to 'storage/xtradb/dict/dict0mem.cc')
-rw-r--r--storage/xtradb/dict/dict0mem.cc40
1 files changed, 34 insertions, 6 deletions
diff --git a/storage/xtradb/dict/dict0mem.cc b/storage/xtradb/dict/dict0mem.cc
index f69e6cc47ae..7ce42fa8efc 100644
--- a/storage/xtradb/dict/dict0mem.cc
+++ b/storage/xtradb/dict/dict0mem.cc
@@ -65,7 +65,10 @@ dict_mem_table_create(
the table is placed */
ulint n_cols, /*!< in: number of columns */
ulint flags, /*!< in: table flags */
- ulint flags2) /*!< in: table flags2 */
+ ulint flags2, /*!< in: table flags2 */
+ bool nonshared)/*!< in: whether the table object is a dummy
+ one that does not need the initialization of
+ locking-related fields. */
{
dict_table_t* table;
mem_heap_t* heap;
@@ -95,12 +98,27 @@ dict_mem_table_create(
ut_d(table->magic_n = DICT_TABLE_MAGIC_N);
+ if (!nonshared) {
+ table->stats_latch = new rw_lock_t;
+ rw_lock_create(dict_table_stats_latch_key, table->stats_latch,
+ SYNC_INDEX_TREE);
+ } else {
+ table->stats_latch = NULL;
+ }
+
#ifndef UNIV_HOTBACKUP
- table->autoinc_lock = static_cast<ib_lock_t*>(
- mem_heap_alloc(heap, lock_get_size()));
- mutex_create(autoinc_mutex_key,
- &table->autoinc_mutex, SYNC_DICT_AUTOINC_MUTEX);
+ if (!nonshared) {
+
+ table->autoinc_lock = static_cast<ib_lock_t*>(
+ mem_heap_alloc(heap, lock_get_size()));
+
+ mutex_create(autoinc_mutex_key,
+ &table->autoinc_mutex, SYNC_DICT_AUTOINC_MUTEX);
+ } else {
+
+ table->autoinc_lock = NULL;
+ }
table->autoinc = 0;
@@ -150,8 +168,18 @@ dict_mem_table_free(
}
}
#ifndef UNIV_HOTBACKUP
- mutex_free(&(table->autoinc_mutex));
+ if (table->stats_latch) {
+
+ mutex_free(&(table->autoinc_mutex));
+ }
#endif /* UNIV_HOTBACKUP */
+
+ if (table->stats_latch) {
+
+ rw_lock_free(table->stats_latch);
+ delete table->stats_latch;
+ }
+
ut_free(table->name);
mem_heap_free(table->heap);
}