Commit a1e6710b authored by heikki@donna.mysql.fi's avatar heikki@donna.mysql.fi
Browse files

buf0buf.c Fixed a race condition in buf0lru and btr0sea which could corrupt the LRU list

buf0lru.c	Fixed a race condition in buf0lru and btr0sea which could corrupt the LRU list
parent 9d0e3f30
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
jani@hynda.mysql.fi
heikki@donna.mysql.fi
+13 −0
Original line number Diff line number Diff line
@@ -863,6 +863,19 @@ buf_page_get_known_nowait(
	
	mutex_enter(&(buf_pool->mutex));

	if (block->state == BUF_BLOCK_REMOVE_HASH) {
	        /* Another thread is just freeing the block from the LRU list
	        of the buffer pool: do not try to access this page; this
		attempt to access the page can only come through the hash
		index because when the buffer block state is ..._REMOVE_HASH,
		we have already removed it from the page address hash table
		of the buffer pool. */

	        mutex_exit(&(buf_pool->mutex));

		return(FALSE);
	}

#ifdef UNIV_SYNC_DEBUG
	buf_block_buf_fix_inc_debug(block, file, line);
#else
+3 −1
Original line number Diff line number Diff line
@@ -138,6 +138,8 @@ buf_LRU_search_and_free_block(

			mutex_enter(&(buf_pool->mutex));

			ut_a(block->buf_fix_count == 0);

			buf_LRU_block_free_hashed_page(block);

			freed = TRUE;