diff --git a/ibuf/ibuf0ibuf.c b/ibuf/ibuf0ibuf.c index a8816d493c2..a0cf50b1505 100644 --- a/ibuf/ibuf0ibuf.c +++ b/ibuf/ibuf0ibuf.c @@ -3330,6 +3330,20 @@ ibuf_insert_to_index_page( rec = page_rec_get_next(page_get_infimum_rec(page)); + if (page_rec_is_supremum(rec)) { + /* Empty pages can result from buffered delete operations. + The first record from the free list can be used to find the + father node. */ + rec = page_header_get_ptr(page, PAGE_FREE); + if (UNIV_UNLIKELY(rec == NULL)) { + fputs("InnoDB: Trying to insert a record from" + " the insert buffer to an index page\n" + "InnoDB: but the index page is empty!\n", + stderr); + goto dump; + } + } + if (UNIV_UNLIKELY(rec_get_n_fields(rec, index) != dtuple_get_n_fields(entry))) { fputs("InnoDB: Trying to insert a record from"