diff options
author | Georgi Kodinov <Georgi.Kodinov@Oracle.com> | 2012-03-08 17:19:54 +0200 |
---|---|---|
committer | Georgi Kodinov <Georgi.Kodinov@Oracle.com> | 2012-03-08 17:19:54 +0200 |
commit | 9c366f7921a64cf502410e398ee55613d5606bd6 (patch) | |
tree | a5ef23265ef65a2b773d2e588ba3388d273fdf7d /storage/innobase/dict/dict0dict.c | |
parent | dcc5f4208012b233fcece3373ef77712260e69fb (diff) | |
parent | 9747c33b31009182b9a065caba2fb00bbbf72dad (diff) | |
download | mariadb-git-9c366f7921a64cf502410e398ee55613d5606bd6.tar.gz |
merge mysql-5.5->mysql-5.5-security
Diffstat (limited to 'storage/innobase/dict/dict0dict.c')
-rw-r--r-- | storage/innobase/dict/dict0dict.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c index c6b0fa0d623..5be94a10374 100644 --- a/storage/innobase/dict/dict0dict.c +++ b/storage/innobase/dict/dict0dict.c @@ -4341,16 +4341,27 @@ dict_update_statistics( (srv_force_recovery < SRV_FORCE_NO_IBUF_MERGE || (srv_force_recovery < SRV_FORCE_NO_LOG_REDO && dict_index_is_clust(index)))) { + mtr_t mtr; ulint size; - size = btr_get_size(index, BTR_TOTAL_SIZE); - index->stat_index_size = size; + mtr_start(&mtr); + mtr_s_lock(dict_index_get_lock(index), &mtr); - sum_of_index_sizes += size; + size = btr_get_size(index, BTR_TOTAL_SIZE, &mtr); - size = btr_get_size(index, BTR_N_LEAF_PAGES); + if (size != ULINT_UNDEFINED) { + sum_of_index_sizes += size; + index->stat_index_size = size; + size = btr_get_size( + index, BTR_N_LEAF_PAGES, &mtr); + } + + mtr_commit(&mtr); - if (size == 0) { + switch (size) { + case ULINT_UNDEFINED: + goto fake_statistics; + case 0: /* The root node of the tree is a leaf */ size = 1; } @@ -4367,6 +4378,7 @@ dict_update_statistics( various means, also via secondary indexes. */ ulint i; +fake_statistics: sum_of_index_sizes++; index->stat_index_size = index->stat_n_leaf_pages = 1; |