diff options
Diffstat (limited to 'storage/innobase/buf/buf0rea.cc')
-rw-r--r-- | storage/innobase/buf/buf0rea.cc | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/storage/innobase/buf/buf0rea.cc b/storage/innobase/buf/buf0rea.cc index 20603021072..b8b7643702e 100644 --- a/storage/innobase/buf/buf0rea.cc +++ b/storage/innobase/buf/buf0rea.cc @@ -813,23 +813,26 @@ buf_read_ibuf_merge_pages( #endif for (ulint i = 0; i < n_stored; i++) { - const page_id_t page_id(space_ids[i], page_nos[i]); - - buf_pool_t* buf_pool = buf_pool_get(page_id); - bool found; const page_size_t page_size(fil_space_get_page_size( space_ids[i], &found)); if (!found) { tablespace_deleted: - /* The tablespace was not found, remove the - entries for that page */ - ibuf_merge_or_delete_for_page(NULL, page_id, - NULL, FALSE); + /* The tablespace was not found: remove all + entries for it */ + ibuf_delete_for_discarded_space(space_ids[i]); + while (i + 1 < n_stored + && space_ids[i + 1] == space_ids[i]) { + i++; + } continue; } + const page_id_t page_id(space_ids[i], page_nos[i]); + + buf_pool_t* buf_pool = buf_pool_get(page_id); + while (buf_pool->n_pend_reads > buf_pool->curr_size / BUF_READ_AHEAD_PEND_LIMIT) { os_thread_sleep(500000); |