diff options
author | Sergei Golubchik <sergii@pisem.net> | 2014-05-06 10:21:34 +0200 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2014-05-06 10:21:34 +0200 |
commit | b968363aac2bf75d014482f8405e6a9fed73ccd6 (patch) | |
tree | 7f2aa9432e293ffe4dfcc772c06991d0b604ca24 /storage/xtradb/dict/dict0mem.cc | |
parent | e2e5d07b2807706fb9187f00c049474a01ab15da (diff) | |
parent | 05fd3e63665597d3bcdf1094bb111df014087936 (diff) | |
download | mariadb-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.cc | 40 |
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); } |