Index: buf/buf0lru.c =================================================================== --- buf/buf0lru.c (revision 1) +++ buf/buf0lru.c (working copy) @@ -87,7 +87,7 @@ while (block != NULL) { - mutex_enter(&block->mutex); + mutex_enter(block->mutex); ut_a(block->state == BUF_BLOCK_FILE_PAGE); @@ -115,7 +115,7 @@ if (block->is_hashed) { page_no = block->offset; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); @@ -143,7 +143,7 @@ buf_LRU_block_free_hashed_page(block); } next_page: - mutex_exit(&block->mutex); + mutex_exit(block->mutex); block = UT_LIST_GET_PREV(LRU, block); } @@ -218,7 +218,7 @@ while (block != NULL) { ut_a(block->in_LRU_list); - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (buf_flush_ready_for_replace(block)) { @@ -234,7 +234,7 @@ buf_LRU_block_remove_hashed_page(block); mutex_exit(&(buf_pool->mutex)); - mutex_exit(&block->mutex); + mutex_exit(block->mutex); /* Remove possible adaptive hash index built on the page; in the case of AWE the block may not have a @@ -247,16 +247,16 @@ ut_a(block->buf_fix_count == 0); mutex_enter(&(buf_pool->mutex)); - mutex_enter(&block->mutex); + mutex_enter(block->mutex); buf_LRU_block_free_hashed_page(block); freed = TRUE; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); break; } - mutex_exit(&block->mutex); + mutex_exit(block->mutex); block = UT_LIST_GET_PREV(LRU, block); distance++; @@ -431,11 +431,11 @@ } } - mutex_enter(&block->mutex); + mutex_enter(block->mutex); block->state = BUF_BLOCK_READY_FOR_USE; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); @@ -838,7 +838,7 @@ { #ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&(buf_pool->mutex))); - ut_ad(mutex_own(&block->mutex)); + ut_ad(mutex_own(block->mutex)); #endif /* UNIV_SYNC_DEBUG */ ut_ad(block); @@ -878,7 +878,7 @@ { #ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&(buf_pool->mutex))); - ut_ad(mutex_own(&block->mutex)); + ut_ad(mutex_own(block->mutex)); #endif /* UNIV_SYNC_DEBUG */ ut_ad(block); @@ -936,7 +936,7 @@ { #ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&(buf_pool->mutex))); - ut_ad(mutex_own(&block->mutex)); + ut_ad(mutex_own(block->mutex)); #endif /* UNIV_SYNC_DEBUG */ ut_a(block->state == BUF_BLOCK_REMOVE_HASH); Index: buf/buf0flu.c =================================================================== --- buf/buf0flu.c (revision 2) +++ buf/buf0flu.c (working copy) @@ -114,7 +114,7 @@ { #ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&(buf_pool->mutex))); - ut_ad(mutex_own(&block->mutex)); + ut_ad(mutex_own(block->mutex)); #endif /* UNIV_SYNC_DEBUG */ if (block->state != BUF_BLOCK_FILE_PAGE) { ut_print_timestamp(stderr); @@ -149,7 +149,7 @@ { #ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&(buf_pool->mutex))); - ut_ad(mutex_own(&(block->mutex))); + ut_ad(mutex_own((block->mutex))); #endif /* UNIV_SYNC_DEBUG */ ut_a(block->state == BUF_BLOCK_FILE_PAGE); @@ -547,7 +547,7 @@ return(0); } - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (flush_type == BUF_FLUSH_LIST && buf_flush_ready_for_flush(block, flush_type)) { @@ -583,18 +583,18 @@ if buf_fix_count == 0, then we know we need not wait */ if (block->buf_fix_count == 0) { - rw_lock_s_lock_gen(&(block->lock), BUF_IO_WRITE); + rw_lock_s_lock_gen(block->lock, BUF_IO_WRITE); locked = TRUE; } - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); if (!locked) { buf_flush_buffered_writes(); - rw_lock_s_lock_gen(&(block->lock), BUF_IO_WRITE); + rw_lock_s_lock_gen(block->lock, BUF_IO_WRITE); } #ifdef UNIV_DEBUG @@ -644,13 +644,13 @@ (buf_pool->n_flush[flush_type])++; - rw_lock_s_lock_gen(&(block->lock), BUF_IO_WRITE); + rw_lock_s_lock_gen(block->lock, BUF_IO_WRITE); /* Note that the s-latch is acquired before releasing the buf_pool mutex: this ensures that the latch is acquired immediately. */ - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); buf_flush_write_block_low(block); @@ -684,10 +684,10 @@ (buf_pool->n_flush[flush_type])++; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); - rw_lock_s_lock_gen(&(block->lock), BUF_IO_WRITE); + rw_lock_s_lock_gen(block->lock, BUF_IO_WRITE); #ifdef UNIV_DEBUG if (buf_debug_prints) { @@ -703,7 +703,7 @@ return(1); } - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); return(0); @@ -764,7 +764,7 @@ continue; } else { - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (buf_flush_ready_for_flush(block, flush_type) && (i == offset || block->buf_fix_count == 0)) { @@ -776,7 +776,7 @@ flush the doublewrite buffer before we start waiting. */ - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); @@ -791,7 +791,7 @@ mutex_enter(&(buf_pool->mutex)); } else { - mutex_exit(&block->mutex); + mutex_exit(block->mutex); } } } @@ -886,7 +886,7 @@ while ((block != NULL) && !found) { ut_a(block->state == BUF_BLOCK_FILE_PAGE); - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (buf_flush_ready_for_flush(block, flush_type)) { @@ -894,7 +894,7 @@ space = block->space; offset = block->offset; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); old_page_count = page_count; @@ -912,13 +912,13 @@ } else if (flush_type == BUF_FLUSH_LRU) { - mutex_exit(&block->mutex); + mutex_exit(block->mutex); block = UT_LIST_GET_PREV(LRU, block); } else { ut_ad(flush_type == BUF_FLUSH_LIST); - mutex_exit(&block->mutex); + mutex_exit(block->mutex); block = UT_LIST_GET_PREV(flush_list, block); } @@ -1001,13 +1001,13 @@ + BUF_FLUSH_EXTRA_MARGIN) && (distance < BUF_LRU_FREE_SEARCH_LEN)) { - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (buf_flush_ready_for_replace(block)) { n_replaceable++; } - mutex_exit(&block->mutex); + mutex_exit(block->mutex); distance++; Index: buf/buf0buf.c =================================================================== --- buf/buf0buf.c (revision 1) +++ buf/buf0buf.c (working copy) @@ -491,12 +491,6 @@ block->n_pointers = 0; - mutex_create(&block->mutex); - mutex_set_level(&block->mutex, SYNC_BUF_BLOCK); - - rw_lock_create(&(block->lock)); - ut_ad(rw_lock_validate(&(block->lock))); - #ifdef UNIV_SYNC_DEBUG rw_lock_create(&(block->debug_latch)); rw_lock_set_level(&(block->debug_latch), SYNC_NO_ORDER_CHECK); @@ -525,6 +519,8 @@ byte* frame; ulint i; buf_block_t* block; + mutex_t* buf_mutex_pool; + rw_lock_t* buf_rwlock_pool; ut_a(max_size == curr_size); ut_a(srv_use_awe || n_frames == max_size); @@ -540,6 +536,9 @@ buf_pool = mem_alloc(sizeof(buf_pool_t)); + buf_mutex_pool = mem_alloc(sizeof(mutex_t)*BUF_MUTEX_POOL_SIZE); + buf_rwlock_pool = mem_alloc(sizeof(rw_lock_t)*BUF_MUTEX_POOL_SIZE); + /* 1. Initialize general fields ---------------------------- */ mutex_create(&(buf_pool->mutex)); @@ -640,7 +639,17 @@ } buf_block_init(block, frame); + /* domas: save on mutexes */ + block->mutex= &buf_mutex_pool[ i % BUF_MUTEX_POOL_SIZE ]; + block->lock= &buf_rwlock_pool[ i % BUF_MUTEX_POOL_SIZE ]; + if ( (i/BUF_MUTEX_POOL_SIZE) == 0 ) { + mutex_create(block->mutex); + mutex_set_level(block->mutex, SYNC_BUF_BLOCK); + rw_lock_create(block->lock); + ut_ad(rw_lock_validate(block->lock)); + } + if (srv_use_awe) { /*----------------------------------------*/ block->awe_info = buf_pool->awe_info @@ -764,13 +773,13 @@ while (bck) { ibool skip; - mutex_enter(&bck->mutex); + mutex_enter(bck->mutex); skip = (bck->state == BUF_BLOCK_FILE_PAGE && (bck->buf_fix_count != 0 || bck->io_fix != 0)); if (skip) { - mutex_exit(&bck->mutex); + mutex_exit(bck->mutex); /* We have to skip this */ bck = UT_LIST_GET_PREV(awe_LRU_free_mapped, bck); @@ -803,7 +812,7 @@ buf_pool->n_pages_awe_remapped++; - mutex_exit(&bck->mutex); + mutex_exit(bck->mutex); return; } @@ -895,13 +904,13 @@ { mutex_enter(&(buf_pool->mutex)); - mutex_enter(&block->mutex); + mutex_enter(block->mutex); ut_a(block->state != BUF_BLOCK_FILE_PAGE); buf_LRU_block_free_non_file_page(block); - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); } @@ -1160,7 +1169,7 @@ goto loop; } - mutex_enter(&block->mutex); + mutex_enter(block->mutex); ut_a(block->state == BUF_BLOCK_FILE_PAGE); @@ -1173,7 +1182,7 @@ if (mode == BUF_GET_IF_IN_POOL) { /* The page is only being read to buffer */ mutex_exit(&buf_pool->mutex); - mutex_exit(&block->mutex); + mutex_exit(block->mutex); return(NULL); } @@ -1205,7 +1214,7 @@ block->accessed = TRUE; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); buf_block_make_young(block); @@ -1226,18 +1235,18 @@ if (mode == BUF_GET_NOWAIT) { if (rw_latch == RW_S_LATCH) { - success = rw_lock_s_lock_func_nowait(&(block->lock), + success = rw_lock_s_lock_func_nowait(block->lock, file, line); fix_type = MTR_MEMO_PAGE_S_FIX; } else { ut_ad(rw_latch == RW_X_LATCH); - success = rw_lock_x_lock_func_nowait(&(block->lock), + success = rw_lock_x_lock_func_nowait(block->lock, file, line); fix_type = MTR_MEMO_PAGE_X_FIX; } if (!success) { - mutex_enter(&block->mutex); + mutex_enter(block->mutex); /* This debug code has been added to narrow down Bug# 26081 */ @@ -1248,7 +1257,7 @@ block->buf_fix_count--; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); #ifdef UNIV_SYNC_DEBUG rw_lock_s_unlock(&(block->debug_latch)); #endif @@ -1262,16 +1271,16 @@ completes */ for (;;) { - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (block->io_fix == BUF_IO_READ) { - mutex_exit(&block->mutex); + mutex_exit(block->mutex); os_thread_sleep(WAIT_FOR_READ); } else { - mutex_exit(&block->mutex); + mutex_exit(block->mutex); break; } @@ -1281,11 +1290,11 @@ fix_type = MTR_MEMO_BUF_FIX; } else if (rw_latch == RW_S_LATCH) { - rw_lock_s_lock_func(&(block->lock), 0, file, line); + rw_lock_s_lock_func(block->lock, 0, file, line); fix_type = MTR_MEMO_PAGE_S_FIX; } else { - rw_lock_x_lock_func(&(block->lock), 0, file, line); + rw_lock_x_lock_func(block->lock, 0, file, line); fix_type = MTR_MEMO_PAGE_X_FIX; } @@ -1332,12 +1341,12 @@ /* If AWE is used, block may have a different frame now, e.g., NULL */ - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (UNIV_UNLIKELY(block->state != BUF_BLOCK_FILE_PAGE) || UNIV_UNLIKELY(block->frame != guess)) { - mutex_exit(&block->mutex); + mutex_exit(block->mutex); return(FALSE); } @@ -1350,7 +1359,7 @@ accessed = block->accessed; block->accessed = TRUE; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); buf_block_make_young(block); @@ -1359,17 +1368,17 @@ ut_ad(!ibuf_inside() || ibuf_page(block->space, block->offset)); if (rw_latch == RW_S_LATCH) { - success = rw_lock_s_lock_func_nowait(&(block->lock), + success = rw_lock_s_lock_func_nowait(block->lock, file, line); fix_type = MTR_MEMO_PAGE_S_FIX; } else { - success = rw_lock_x_lock_func_nowait(&(block->lock), + success = rw_lock_x_lock_func_nowait(block->lock, file, line); fix_type = MTR_MEMO_PAGE_X_FIX; } if (UNIV_UNLIKELY(!success)) { - mutex_enter(&block->mutex); + mutex_enter(block->mutex); /* This debug code has been added to narrow down Bug# 26081 */ @@ -1380,7 +1389,7 @@ block->buf_fix_count--; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); #ifdef UNIV_SYNC_DEBUG rw_lock_s_unlock(&(block->debug_latch)); @@ -1393,12 +1402,12 @@ buf_page_dbg_add_level(block->frame, SYNC_NO_ORDER_CHECK); #endif /* UNIV_SYNC_DEBUG */ if (rw_latch == RW_S_LATCH) { - rw_lock_s_unlock(&(block->lock)); + rw_lock_s_unlock(block->lock); } else { - rw_lock_x_unlock(&(block->lock)); + rw_lock_x_unlock(block->lock); } - mutex_enter(&block->mutex); + mutex_enter(block->mutex); /* This debug code has been added to narrow down Bug# 26081 */ @@ -1409,7 +1418,7 @@ block->buf_fix_count--; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); #ifdef UNIV_SYNC_DEBUG rw_lock_s_unlock(&(block->debug_latch)); @@ -1476,7 +1485,7 @@ block = buf_block_align(guess); - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (block->state == BUF_BLOCK_REMOVE_HASH) { /* Another thread is just freeing the block from the LRU list @@ -1486,7 +1495,7 @@ we have already removed it from the page address hash table of the buffer pool. */ - mutex_exit(&block->mutex); + mutex_exit(block->mutex); return(FALSE); } @@ -1498,7 +1507,7 @@ #else buf_block_buf_fix_inc(block); #endif - mutex_exit(&block->mutex); + mutex_exit(block->mutex); if (mode == BUF_MAKE_YOUNG) { buf_block_make_young(block); @@ -1507,17 +1516,17 @@ ut_ad(!ibuf_inside() || (mode == BUF_KEEP_OLD)); if (rw_latch == RW_S_LATCH) { - success = rw_lock_s_lock_func_nowait(&(block->lock), + success = rw_lock_s_lock_func_nowait(block->lock, file, line); fix_type = MTR_MEMO_PAGE_S_FIX; } else { - success = rw_lock_x_lock_func_nowait(&(block->lock), + success = rw_lock_x_lock_func_nowait(block->lock, file, line); fix_type = MTR_MEMO_PAGE_X_FIX; } if (!success) { - mutex_enter(&block->mutex); + mutex_enter(block->mutex); /* This debug code has been added to narrow down Bug# 26081 */ @@ -1528,7 +1537,7 @@ block->buf_fix_count--; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); #ifdef UNIV_SYNC_DEBUG rw_lock_s_unlock(&(block->debug_latch)); @@ -1613,7 +1622,7 @@ { #ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&(buf_pool->mutex))); - ut_ad(mutex_own(&(block->mutex))); + ut_ad(mutex_own(block->mutex)); #endif /* UNIV_SYNC_DEBUG */ ut_a(block->state != BUF_BLOCK_FILE_PAGE); @@ -1720,7 +1729,7 @@ ut_a(block); mutex_enter(&(buf_pool->mutex)); - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (fil_tablespace_deleted_or_being_deleted_in_mem(space, tablespace_version)) { @@ -1733,7 +1742,7 @@ /* The page belongs to a space which has been deleted or is being deleted, or the page is already in buf_pool, return */ - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); buf_block_free(block); @@ -1765,9 +1774,9 @@ same thread would illegally get the x-lock before the page read is completed. The x-lock is cleared by the io-handler thread. */ - rw_lock_x_lock_gen(&(block->lock), BUF_IO_READ); + rw_lock_x_lock_gen(block->lock, BUF_IO_READ); - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); if (mode == BUF_READ_IBUF_PAGES_ONLY) { @@ -1832,7 +1841,7 @@ block = free_block; - mutex_enter(&block->mutex); + mutex_enter(block->mutex); buf_page_init(space, offset, block); @@ -1852,7 +1861,7 @@ block->accessed = TRUE; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); /* Delete possible entries for the page from the insert buffer: such can exist if the page belonged to an index which was dropped */ @@ -1976,7 +1985,7 @@ } mutex_enter(&(buf_pool->mutex)); - mutex_enter(&block->mutex); + mutex_enter(block->mutex); #ifdef UNIV_IBUF_DEBUG ut_a(ibuf_count_get(block->space, block->offset) == 0); @@ -1997,7 +2006,7 @@ buf_pool->n_pend_reads--; buf_pool->n_pages_read++; - rw_lock_x_unlock_gen(&(block->lock), BUF_IO_READ); + rw_lock_x_unlock_gen(block->lock, BUF_IO_READ); #ifdef UNIV_DEBUG if (buf_debug_prints) { @@ -2012,7 +2021,7 @@ buf_flush_write_complete(block); - rw_lock_s_unlock_gen(&(block->lock), BUF_IO_WRITE); + rw_lock_s_unlock_gen(block->lock, BUF_IO_WRITE); buf_pool->n_pages_written++; @@ -2023,7 +2032,7 @@ #endif /* UNIV_DEBUG */ } - mutex_exit(&block->mutex); + mutex_exit(block->mutex); mutex_exit(&(buf_pool->mutex)); #ifdef UNIV_DEBUG @@ -2085,7 +2094,7 @@ block = buf_pool_get_nth_block(buf_pool, i); - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (block->state == BUF_BLOCK_FILE_PAGE) { @@ -2102,7 +2111,7 @@ if (block->flush_type == BUF_FLUSH_LRU) { n_lru_flush++; - ut_a(rw_lock_is_locked(&(block->lock), + ut_a(rw_lock_is_locked(block->lock, RW_LOCK_SHARED)); } else if (block->flush_type == BUF_FLUSH_LIST) { @@ -2116,7 +2125,7 @@ } else if (block->io_fix == BUF_IO_READ) { - ut_a(rw_lock_is_locked(&(block->lock), + ut_a(rw_lock_is_locked(block->lock, RW_LOCK_EX)); } @@ -2131,7 +2140,7 @@ n_free++; } - mutex_exit(&block->mutex); + mutex_exit(block->mutex); } if (n_lru + n_free > buf_pool->curr_size) { @@ -2277,13 +2286,13 @@ block = buf_pool_get_nth_block(buf_pool, i); if (block->magic_n == BUF_BLOCK_MAGIC_N) { - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (block->buf_fix_count != 0 || block->io_fix != 0) { fixed_pages_number++; } - mutex_exit(&block->mutex); + mutex_exit(block->mutex); } } @@ -2449,7 +2458,7 @@ block = buf_pool_get_nth_block(buf_pool, i); - mutex_enter(&block->mutex); + mutex_enter(block->mutex); if (block->state == BUF_BLOCK_FILE_PAGE) { @@ -2463,7 +2472,7 @@ } } - mutex_exit(&block->mutex); + mutex_exit(block->mutex); } mutex_exit(&(buf_pool->mutex)); Index: include/buf0buf.h =================================================================== --- include/buf0buf.h (revision 1) +++ include/buf0buf.h (working copy) @@ -734,13 +734,13 @@ ulint offset; /* page number within the space */ ulint lock_hash_val; /* hashed value of the page address in the record lock hash table */ - mutex_t mutex; /* mutex protecting this block: + mutex_t* mutex; /* mutex protecting this block: state (also protected by the buffer pool mutex), io_fix, buf_fix_count, and accessed; we introduce this new mutex in InnoDB-5.1 to relieve contention on the buffer pool mutex */ - rw_lock_t lock; /* read-write lock of the buffer + rw_lock_t* lock; /* read-write lock of the buffer frame */ buf_block_t* hash; /* node used in chaining to the page hash table */ @@ -883,6 +883,7 @@ }; #define BUF_BLOCK_MAGIC_N 41526563 +#define BUF_MUTEX_POOL_SIZE 1024 /* The buffer pool structure. NOTE! The definition appears here only for other modules of this directory (buf) to see it. Do not use from outside! */ Index: include/buf0buf.ic =================================================================== --- include/buf0buf.ic (revision 1) +++ include/buf0buf.ic (working copy) @@ -348,7 +348,7 @@ block = buf_block_align(ptr); - return(&block->mutex); + return(block->mutex); } /************************************************************************* @@ -457,7 +457,7 @@ #ifdef UNIV_SYNC_DEBUG ut_ad((mutex_own(&(buf_pool->mutex)) && (block->buf_fix_count == 0)) - || rw_lock_own(&(block->lock), RW_LOCK_EXCLUSIVE)); + || rw_lock_own(block->lock, RW_LOCK_EXCLUSIVE)); #endif /*UNIV_SYNC_DEBUG */ UT_DULINT_INC(block->modify_clock); @@ -478,7 +478,7 @@ { #ifdef UNIV_SYNC_DEBUG ut_ad((mutex_own(&(buf_pool->mutex)) && (block->buf_fix_count == 0)) - || rw_lock_own(&(block->lock), RW_LOCK_EXCLUSIVE)); + || rw_lock_own(block->lock, RW_LOCK_EXCLUSIVE)); #endif /* UNIV_SYNC_DEBUG */ UT_DULINT_INC(block->modify_clock); @@ -497,8 +497,8 @@ buf_block_t* block) /* in: block */ { #ifdef UNIV_SYNC_DEBUG - ut_ad(rw_lock_own(&(block->lock), RW_LOCK_SHARED) - || rw_lock_own(&(block->lock), RW_LOCK_EXCLUSIVE)); + ut_ad(rw_lock_own(block->lock, RW_LOCK_SHARED) + || rw_lock_own(block->lock, RW_LOCK_EXCLUSIVE)); #endif /* UNIV_SYNC_DEBUG */ return(block->modify_clock); @@ -521,7 +521,7 @@ ret = rw_lock_s_lock_func_nowait(&(block->debug_latch), file, line); ut_ad(ret == TRUE); - ut_ad(mutex_own(&block->mutex)); + ut_ad(mutex_own(block->mutex)); #endif block->buf_fix_count++; } @@ -535,7 +535,7 @@ buf_block_t* block) /* in: block to bufferfix */ { #ifdef UNIV_SYNC_DEBUG - ut_ad(mutex_own(&block->mutex)); + ut_ad(mutex_own(block->mutex)); #endif block->buf_fix_count++; } @@ -637,7 +637,7 @@ mutex_exit(&buf_pool->mutex); } - mutex_enter(&block->mutex); + mutex_enter(block->mutex); /* This debug code has been added to narrow down Bug# 26081 */ if (UNIV_UNLIKELY(block->buf_fix_count == 0)) { @@ -650,12 +650,12 @@ #endif --block->buf_fix_count; - mutex_exit(&block->mutex); + mutex_exit(block->mutex); if (rw_latch == RW_S_LATCH) { - rw_lock_s_unlock(&(block->lock)); + rw_lock_s_unlock(block->lock); } else if (rw_latch == RW_X_LATCH) { - rw_lock_x_unlock(&(block->lock)); + rw_lock_x_unlock(block->lock); } }