diff options
author | unknown <heikki@donna.mysql.fi> | 2001-03-16 00:22:21 +0200 |
---|---|---|
committer | unknown <heikki@donna.mysql.fi> | 2001-03-16 00:22:21 +0200 |
commit | 34236e77473358d13cd087ecb3791bca4c3e8b20 (patch) | |
tree | 24f9f3e0f8f12dfce6d639229fb19cb84597e1a4 /innobase/buf | |
parent | e0296db76e3d02b6aa239cf27588db523928aab5 (diff) | |
download | mariadb-git-34236e77473358d13cd087ecb3791bca4c3e8b20.tar.gz |
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
innobase/buf/buf0buf.c:
Fixed a race condition in buf0lru and btr0sea which could corrupt the LRU list
innobase/buf/buf0lru.c:
Fixed a race condition in buf0lru and btr0sea which could corrupt the LRU list
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
Diffstat (limited to 'innobase/buf')
-rw-r--r-- | innobase/buf/buf0buf.c | 13 | ||||
-rw-r--r-- | innobase/buf/buf0lru.c | 4 |
2 files changed, 16 insertions, 1 deletions
diff --git a/innobase/buf/buf0buf.c b/innobase/buf/buf0buf.c index 16662b6c51c..34fbc5b9f98 100644 --- a/innobase/buf/buf0buf.c +++ b/innobase/buf/buf0buf.c @@ -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 diff --git a/innobase/buf/buf0lru.c b/innobase/buf/buf0lru.c index 26bdd7db1fe..4626dc2757b 100644 --- a/innobase/buf/buf0lru.c +++ b/innobase/buf/buf0lru.c @@ -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; @@ -435,7 +437,7 @@ buf_LRU_add_block_to_end_low( defined: init it */ buf_LRU_old_init(); - } + } } /********************************************************************** |