summaryrefslogtreecommitdiff
path: root/storage/innobase/buf/buf0flu.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/buf/buf0flu.cc')
-rw-r--r--storage/innobase/buf/buf0flu.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc
index 73fc2957ebb..68dbaee5e7d 100644
--- a/storage/innobase/buf/buf0flu.cc
+++ b/storage/innobase/buf/buf0flu.cc
@@ -1005,11 +1005,19 @@ uint32_t fil_space_t::flush_freed(bool writable)
mysql_mutex_assert_not_owner(&buf_pool.flush_list_mutex);
mysql_mutex_assert_not_owner(&buf_pool.mutex);
- freed_range_mutex.lock();
- if (freed_ranges.empty() || log_sys.get_flushed_lsn() < get_last_freed_lsn())
+ for (;;)
{
+ freed_range_mutex.lock();
+ if (freed_ranges.empty())
+ {
+ freed_range_mutex.unlock();
+ return 0;
+ }
+ const lsn_t flush_lsn= last_freed_lsn;
+ if (log_sys.get_flushed_lsn() >= flush_lsn)
+ break;
freed_range_mutex.unlock();
- return 0;
+ log_write_up_to(flush_lsn, true);
}
const unsigned physical{physical_size()};