Skip to content

Commit 73af075

Browse files
committed
Reduce the number of rw_lock_own() calls
Replace pairs of rw_lock_own() calls with calls to rw_lock_own_flagged(). These calls are only present in debug builds.
1 parent d0d073b commit 73af075

File tree

11 files changed

+49
-59
lines changed

11 files changed

+49
-59
lines changed

storage/innobase/btr/btr0sea.cc

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -529,10 +529,10 @@ btr_search_update_block_hash_info(
529529
buf_block_t* block,
530530
const btr_cur_t* cursor)
531531
{
532-
ut_ad(!rw_lock_own(btr_get_search_latch(cursor->index), RW_LOCK_S));
533-
ut_ad(!rw_lock_own(btr_get_search_latch(cursor->index), RW_LOCK_X));
534-
ut_ad(rw_lock_own(&block->lock, RW_LOCK_S)
535-
|| rw_lock_own(&block->lock, RW_LOCK_X));
532+
ut_ad(!rw_lock_own_flagged(btr_get_search_latch(cursor->index),
533+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
534+
ut_ad(rw_lock_own_flagged(&block->lock,
535+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
536536

537537
info->last_hash_succ = FALSE;
538538

@@ -607,8 +607,8 @@ btr_search_update_hash_ref(
607607

608608
ut_ad(cursor->flag == BTR_CUR_HASH_FAIL);
609609
ut_ad(rw_lock_own(btr_get_search_latch(cursor->index), RW_LOCK_X));
610-
ut_ad(rw_lock_own(&(block->lock), RW_LOCK_S)
611-
|| rw_lock_own(&(block->lock), RW_LOCK_X));
610+
ut_ad(rw_lock_own_flagged(&block->lock,
611+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
612612
ut_ad(page_align(btr_cur_get_rec(cursor)) == block->frame);
613613
ut_ad(page_is_leaf(block->frame));
614614
assert_block_ahi_valid(block);
@@ -667,8 +667,8 @@ btr_search_info_update_slow(
667667
buf_block_t* block;
668668
ibool build_index;
669669

670-
ut_ad(!rw_lock_own(btr_get_search_latch(cursor->index), RW_LOCK_S));
671-
ut_ad(!rw_lock_own(btr_get_search_latch(cursor->index), RW_LOCK_X));
670+
ut_ad(!rw_lock_own_flagged(btr_get_search_latch(cursor->index),
671+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
672672

673673
block = btr_cur_get_block(cursor);
674674

@@ -1138,8 +1138,8 @@ btr_search_drop_page_hash_index(buf_block_t* block)
11381138

11391139
ut_ad(block->page.buf_fix_count == 0
11401140
|| buf_block_get_state(block) == BUF_BLOCK_REMOVE_HASH
1141-
|| rw_lock_own(&block->lock, RW_LOCK_S)
1142-
|| rw_lock_own(&block->lock, RW_LOCK_X));
1141+
|| rw_lock_own_flagged(&block->lock,
1142+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
11431143
ut_ad(page_is_leaf(block->frame));
11441144

11451145
/* We must not dereference index here, because it could be freed
@@ -1393,8 +1393,8 @@ btr_search_build_page_hash_index(
13931393
ut_ad(page_is_leaf(block->frame));
13941394

13951395
ut_ad(!rw_lock_own(btr_get_search_latch(index), RW_LOCK_X));
1396-
ut_ad(rw_lock_own(&(block->lock), RW_LOCK_S)
1397-
|| rw_lock_own(&(block->lock), RW_LOCK_X));
1396+
ut_ad(rw_lock_own_flagged(&block->lock,
1397+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
13981398

13991399
btr_search_s_lock(index);
14001400

storage/innobase/buf/buf0buf.cc

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4448,8 +4448,9 @@ buf_page_get_gen(
44484448
case BUF_GET_IF_IN_POOL_OR_WATCH:
44494449
case BUF_PEEK_IF_IN_POOL:
44504450
case BUF_EVICT_IF_IN_POOL:
4451-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_X));
4452-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_S));
4451+
ut_ad(!rw_lock_own_flagged(
4452+
hash_lock,
4453+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
44534454
return(NULL);
44544455
}
44554456

@@ -4785,8 +4786,8 @@ buf_page_get_gen(
47854786
ut_ad(block == fix_block);
47864787
ut_ad(fix_block->page.buf_fix_count > 0);
47874788

4788-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_X));
4789-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_S));
4789+
ut_ad(!rw_lock_own_flagged(hash_lock,
4790+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
47904791

47914792
ut_ad(buf_block_get_state(fix_block) == BUF_BLOCK_FILE_PAGE);
47924793

@@ -4962,8 +4963,8 @@ buf_page_get_gen(
49624963
ut_a(ibuf_count_get(fix_block->page.id) == 0);
49634964
#endif
49644965

4965-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_X));
4966-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_S));
4966+
ut_ad(!rw_lock_own_flagged(hash_lock,
4967+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
49674968

49684969
return(fix_block);
49694970
}
@@ -5639,8 +5640,8 @@ buf_page_init_for_read(
56395640
ibuf_mtr_commit(&mtr);
56405641
}
56415642

5642-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_X));
5643-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_S));
5643+
ut_ad(!rw_lock_own_flagged(hash_lock,
5644+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
56445645
ut_ad(!bpage || buf_page_in_file(bpage));
56455646

56465647
return(bpage);

storage/innobase/buf/buf0lru.cc

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1630,8 +1630,8 @@ buf_LRU_free_page(
16301630
}
16311631

16321632
/* buf_LRU_block_remove_hashed() releases the hash_lock */
1633-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_X)
1634-
&& !rw_lock_own(hash_lock, RW_LOCK_S));
1633+
ut_ad(!rw_lock_own_flagged(hash_lock,
1634+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
16351635

16361636
/* We have just freed a BUF_BLOCK_FILE_PAGE. If b != NULL
16371637
then it was a compressed page with an uncompressed frame and
@@ -2184,9 +2184,8 @@ buf_LRU_free_one_page(
21842184
}
21852185

21862186
/* buf_LRU_block_remove_hashed() releases hash_lock and block_mutex */
2187-
ut_ad(!rw_lock_own(hash_lock, RW_LOCK_X)
2188-
&& !rw_lock_own(hash_lock, RW_LOCK_S));
2189-
2187+
ut_ad(!rw_lock_own_flagged(hash_lock,
2188+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
21902189
ut_ad(!mutex_own(block_mutex));
21912190
}
21922191

storage/innobase/gis/gis0sea.cc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,8 @@ rtr_pcur_getnext_from_path(
258258
rtr_info->tree_savepoints[tree_idx] = mtr_set_savepoint(mtr);
259259

260260
#ifdef UNIV_RTR_DEBUG
261-
ut_ad(!(rw_lock_own(&btr_cur->page_cur.block->lock, RW_LOCK_X)
262-
||
263-
rw_lock_own(&btr_cur->page_cur.block->lock, RW_LOCK_S))
261+
ut_ad(!(rw_lock_own_flagged(&btr_cur->page_cur.block->lock,
262+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S))
264263
|| my_latch_mode == BTR_MODIFY_TREE
265264
|| my_latch_mode == BTR_CONT_MODIFY_TREE
266265
|| !page_is_leaf(buf_block_get_frame(

storage/innobase/include/ha0ha.ic

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*****************************************************************************
22

33
Copyright (c) 1994, 2015, Oracle and/or its affiliates. All Rights Reserved.
4+
Copyright (c) 2018, MariaDB Corporation.
45

56
This program is free software; you can redistribute it and/or modify it under
67
the terms of the GNU General Public License as published by the Free Software
@@ -137,11 +138,8 @@ hash_assert_can_search(
137138
if (table->type == HASH_TABLE_SYNC_MUTEX) {
138139
ut_ad(mutex_own(hash_get_mutex(table, fold)));
139140
} else if (table->type == HASH_TABLE_SYNC_RW_LOCK) {
140-
# ifdef UNIV_DEBUG
141-
rw_lock_t* lock = hash_get_lock(table, fold);
142-
ut_ad(rw_lock_own(lock, RW_LOCK_X)
143-
|| rw_lock_own(lock, RW_LOCK_S));
144-
# endif
141+
ut_ad(rw_lock_own_flagged(hash_get_lock(table, fold),
142+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
145143
} else {
146144
ut_ad(table->type == HASH_TABLE_SYNC_NONE);
147145
}

storage/innobase/include/sync0rw.ic

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,7 @@ rw_lock_s_lock_func(
281281
the threads which have s-locked a latch. This would use some CPU
282282
time. */
283283

284-
ut_ad(!rw_lock_own(lock, RW_LOCK_S)); /* see NOTE above */
285-
ut_ad(!rw_lock_own(lock, RW_LOCK_X));
284+
ut_ad(!rw_lock_own_flagged(lock, RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
286285

287286
if (!rw_lock_s_lock_low(lock, pass, file_name, line)) {
288287

storage/innobase/row/row0log.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,8 @@ row_log_online_op(
290290

291291
ut_ad(dtuple_validate(tuple));
292292
ut_ad(dtuple_get_n_fields(tuple) == dict_index_get_n_fields(index));
293-
ut_ad(rw_lock_own(dict_index_get_lock(index), RW_LOCK_S)
294-
|| rw_lock_own(dict_index_get_lock(index), RW_LOCK_X));
293+
ut_ad(rw_lock_own_flagged(&index->lock,
294+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
295295

296296
if (index->is_corrupted()) {
297297
return;

storage/innobase/row/row0sel.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,8 +1102,8 @@ sel_set_rtr_rec_lock(
11021102
rw_lock_x_lock(&(match->block.lock));
11031103
retry:
11041104
cur_block = btr_pcur_get_block(pcur);
1105-
ut_ad(rw_lock_own(&(match->block.lock), RW_LOCK_X)
1106-
|| rw_lock_own(&(match->block.lock), RW_LOCK_S));
1105+
ut_ad(rw_lock_own_flagged(&match->block.lock,
1106+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
11071107
ut_ad(page_is_leaf(buf_block_get_frame(cur_block)));
11081108

11091109
err = lock_sec_rec_read_check_and_lock(

storage/innobase/row/row0umod.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ row_undo_mod_clust(
265265
ut_ad(thr_get_trx(thr) == node->trx);
266266
ut_ad(node->trx->dict_operation_lock_mode);
267267
ut_ad(node->trx->in_rollback);
268-
ut_ad(rw_lock_own(dict_operation_lock, RW_LOCK_S)
269-
|| rw_lock_own(dict_operation_lock, RW_LOCK_X));
268+
ut_ad(rw_lock_own_flagged(dict_operation_lock,
269+
RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
270270

271271
log_free_check();
272272
pcur = &node->pcur;

storage/innobase/sync/sync0rw.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
44
Copyright (c) 2008, Google Inc.
5-
Copyright (c) 2017, MariaDB Corporation.
5+
Copyright (c) 2017, 2018, MariaDB Corporation.
66
77
Portions of this file contain modifications contributed and copyrighted by
88
Google, Inc. Those modifications are gratefully acknowledged and are described
@@ -1097,12 +1097,12 @@ rw_lock_own_flagged(
10971097

10981098
const rw_lock_debug_t* info = *it;
10991099

1100-
ut_ad(os_thread_eq(info->thread_id, os_thread_get_curr_id()));
1101-
1102-
if (info->pass != 0) {
1100+
if (info->pass) {
11031101
continue;
11041102
}
11051103

1104+
ut_ad(os_thread_eq(info->thread_id, os_thread_get_curr_id()));
1105+
11061106
switch (info->lock_type) {
11071107
case RW_LOCK_S:
11081108

0 commit comments

Comments
 (0)