Commit e75eaaba authored by marko's avatar marko

branches/zip: Merge revisions 4005:4032 from branches/5.1:

  ------------------------------------------------------------------------
  r4032 | marko | 2009-01-23 15:43:51 +0200 (Fri, 23 Jan 2009) | 10 lines

  branches/5.1: Merge r4031 from branches/5.0:

  btr_search_drop_page_hash_when_freed(): Check if buf_page_get_gen()
  returns NULL.  The page may have been evicted from the buffer pool
  between buf_page_peek_if_search_hashed() and buf_page_get_gen(),
  because the buffer pool mutex will be released between these two calls.
  (Bug #42279, Issue #160)

  rb://82 approved by Heikki Tuuri
  ------------------------------------------------------------------------
parent 5dceabc9
2009-01-23 The InnoDB Team
* btr/btr0sea.c:
Fix Bug#42279 Race condition in btr_search_drop_page_hash_when_freed()
2009-01-23 The InnoDB Team
* include/buf0buf.h, buf/buf0buf.c:
......
......@@ -1155,10 +1155,18 @@ btr_search_drop_page_hash_when_freed(
block = buf_page_get_gen(space, zip_size, page_no, RW_S_LATCH, NULL,
BUF_GET_IF_IN_POOL, __FILE__, __LINE__,
&mtr);
/* Because the buffer pool mutex was released by
buf_page_peek_if_search_hashed(), it is possible that the
block was removed from the buffer pool by another thread
before buf_page_get_gen() got a chance to acquire the buffer
pool mutex again. Thus, we must check for a NULL return. */
buf_block_dbg_add_level(block, SYNC_TREE_NODE_FROM_HASH);
if (UNIV_LIKELY(block != NULL)) {
btr_search_drop_page_hash_index(block);
buf_block_dbg_add_level(block, SYNC_TREE_NODE_FROM_HASH);
btr_search_drop_page_hash_index(block);
}
mtr_commit(&mtr);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment