Comment 11 for bug 1227581

Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote :

This is caused by a race condition between one thread performing a tablespace delete and another doing a compressed page flush list relocation. The latter thread will remove a dirty, thus present on the flush list, uncompressed page image from page hash and LRU list, set its status to BUF_BLOCK_REMOVE_HASH. Then the former thread would call buf_pool_get_dirty_pages_count(), find such page there and assert.

A debug-only issue.

Not a bug in Oracle, since they take both flush list and buffer pool mutex in buf_pool_get_dirty_pages_count(), preventing seeing flush list just before the flush list relocation.

Even though buf_pool_get_dirty_pages_count() is not present in 5.5, a cursory glance at 5.5 suggests that the code there needs to be checked to not assume that for every page in the flush list buf_page_in_file() holds. Probably other places in 5.6 too.