diff options
author | Vasil Dimov <vasil.dimov@oracle.com> | 2010-04-12 18:20:41 +0300 |
---|---|---|
committer | Vasil Dimov <vasil.dimov@oracle.com> | 2010-04-12 18:20:41 +0300 |
commit | c877ff39bceb4df96acf3e54f7c98a2bed12b8ee (patch) | |
tree | 04211a3e5734b73e9f94cff511a4a74ff87075f0 /storage/innobase/include/buf0flu.ic | |
parent | fe0828b3b8193e086abe740572c9b0cb2b7da671 (diff) | |
parent | 410e23a6af8b597cdda0890d6ed9008355edee7a (diff) | |
download | mariadb-git-c877ff39bceb4df96acf3e54f7c98a2bed12b8ee.tar.gz |
Import branches/innodb+ from SVN on top of storage/innobase.
Diffstat (limited to 'storage/innobase/include/buf0flu.ic')
-rw-r--r-- | storage/innobase/include/buf0flu.ic | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/storage/innobase/include/buf0flu.ic b/storage/innobase/include/buf0flu.ic index c90cd59e4b6..fb71932e453 100644 --- a/storage/innobase/include/buf0flu.ic +++ b/storage/innobase/include/buf0flu.ic @@ -33,7 +33,8 @@ UNIV_INTERN void buf_flush_insert_into_flush_list( /*=============================*/ - buf_block_t* block); /*!< in/out: block which is modified */ + buf_block_t* block, /*!< in/out: block which is modified */ + ib_uint64_t lsn); /*!< in: oldest modification */ /********************************************************************//** Inserts a modified block into the flush list in the right sorted position. This function is used by recovery, because there the modifications do not @@ -42,7 +43,8 @@ UNIV_INTERN void buf_flush_insert_sorted_into_flush_list( /*====================================*/ - buf_block_t* block); /*!< in/out: block which is modified */ + buf_block_t* block, /*!< in/out: block which is modified */ + ib_uint64_t lsn); /*!< in: oldest modification */ /********************************************************************//** This function should be called at a mini-transaction commit, if a page was @@ -61,24 +63,27 @@ buf_flush_note_modification( #ifdef UNIV_SYNC_DEBUG ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX)); #endif /* UNIV_SYNC_DEBUG */ - ut_ad(buf_pool_mutex_own()); + + ut_ad(!buf_pool_mutex_own()); + ut_ad(!buf_flush_list_mutex_own()); + ut_ad(buf_flush_order_mutex_own()); ut_ad(mtr->start_lsn != 0); ut_ad(mtr->modifications); + + mutex_enter(&block->mutex); ut_ad(block->page.newest_modification <= mtr->end_lsn); block->page.newest_modification = mtr->end_lsn; if (!block->page.oldest_modification) { - - block->page.oldest_modification = mtr->start_lsn; - ut_ad(block->page.oldest_modification != 0); - - buf_flush_insert_into_flush_list(block); + buf_flush_insert_into_flush_list(block, mtr->start_lsn); } else { ut_ad(block->page.oldest_modification <= mtr->start_lsn); } + mutex_exit(&block->mutex); + ++srv_buf_pool_write_requests; } @@ -101,23 +106,23 @@ buf_flush_recv_note_modification( ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX)); #endif /* UNIV_SYNC_DEBUG */ - buf_pool_mutex_enter(); + ut_ad(!buf_pool_mutex_own()); + ut_ad(!buf_flush_list_mutex_own()); + ut_ad(buf_flush_order_mutex_own()); + ut_ad(start_lsn != 0); ut_ad(block->page.newest_modification <= end_lsn); + mutex_enter(&block->mutex); block->page.newest_modification = end_lsn; if (!block->page.oldest_modification) { - - block->page.oldest_modification = start_lsn; - - ut_ad(block->page.oldest_modification != 0); - - buf_flush_insert_sorted_into_flush_list(block); + buf_flush_insert_sorted_into_flush_list(block, start_lsn); } else { ut_ad(block->page.oldest_modification <= start_lsn); } - buf_pool_mutex_exit(); + mutex_exit(&block->mutex); + } #endif /* !UNIV_HOTBACKUP */ |