mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
Applying InnoDB snashot 5.1-ss4350, part 1. Fixes
Bug #42279 Race condition in btr_search_drop_page_hash_when_freed() Detailed revision comments: 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) rb://82 approved by Heikki Tuuri
This commit is contained in:
parent
5c21142855
commit
556135a1a1
1 changed files with 10 additions and 2 deletions
|
@ -1105,12 +1105,20 @@ btr_search_drop_page_hash_when_freed(
|
|||
page = buf_page_get_gen(space, 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. */
|
||||
|
||||
if (UNIV_LIKELY(page != NULL)) {
|
||||
|
||||
#ifdef UNIV_SYNC_DEBUG
|
||||
buf_page_dbg_add_level(page, SYNC_TREE_NODE_FROM_HASH);
|
||||
buf_page_dbg_add_level(page, SYNC_TREE_NODE_FROM_HASH);
|
||||
#endif /* UNIV_SYNC_DEBUG */
|
||||
|
||||
btr_search_drop_page_hash_index(page);
|
||||
btr_search_drop_page_hash_index(page);
|
||||
}
|
||||
|
||||
mtr_commit(&mtr);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue