Commit 2b3423c4 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.3 into 10.4

parents 3e8b6a79 489b5569
Subproject commit 7fdb3eab66384a355475704332d11cc1ab82499a Subproject commit d204e83104222844251b221e9be7eb3dd9f8d63d
...@@ -3297,20 +3297,27 @@ DECLARE_THREAD(buf_flush_page_cleaner_coordinator)(void*) ...@@ -3297,20 +3297,27 @@ DECLARE_THREAD(buf_flush_page_cleaner_coordinator)(void*)
bool success; bool success;
do { do {
/* In case an asynchronous read request was posted by
any thread (other than something invoking
ibuf_merge_in_background()), it is possible that the
change buffer will be merged to the page once the read
completes. To avoid race conditions and corruption due
to that, we will loop here until there are no pending
page read operations. */
success = !buf_get_n_pending_read_ios();
pc_request(ULINT_MAX, LSN_MAX); pc_request(ULINT_MAX, LSN_MAX);
while (pc_flush_slot() > 0) {} while (pc_flush_slot() > 0) {}
ulint n_flushed_lru = 0; ulint n_flushed_lru = 0;
ulint n_flushed_list = 0; ulint n_flushed_list = 0;
success = pc_wait_finished(&n_flushed_lru, &n_flushed_list); success = pc_wait_finished(&n_flushed_lru, &n_flushed_list)
&& success && !n_flushed_lru && !n_flushed_list;
n_flushed = n_flushed_lru + n_flushed_list;
buf_flush_wait_batch_end(NULL, BUF_FLUSH_LIST); buf_flush_wait_batch_end(NULL, BUF_FLUSH_LIST);
buf_flush_wait_LRU_batch_end(); buf_flush_wait_LRU_batch_end();
} while (!success || n_flushed > 0); } while (!success);
/* Some sanity checks */ /* Some sanity checks */
ut_a(srv_get_active_thread_type() == SRV_NONE); ut_a(srv_get_active_thread_type() == SRV_NONE);
......
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