• Marko Mäkelä's avatar
    Bug #11766591 59733: Possible deadlock when buffered changes are to be · 669ff037
    Marko Mäkelä authored
    discarded in buf_page_create()
    
    This bug turned out to be a false alarm, a bug in the UNIV_SYNC_DEBUG
    diagnostic code. Because of this, the patch was not backported to the
    built-in InnoDB in MySQL 5.1. Furthermore, there is no test case for
    InnoDB Plugin in MySQL 5.1, because the delete buffering in MySQL 5.5
    makes triggering the failure much easier.
    
    When a freed page for which there exist orphaned buffered changes is
    allocated and reused for something else, buf_page_create() will discard
    the buffered changes by invoking ibuf_merge_or_delete_for_page().
    This would violate the InnoDB latching order.
    
    Tweak the latching order as follows. Move SYNC_IBUF_MUTEX below
    SYNC_FSP_PAGE, where it logically belongs, and assign new latching
    levels for the ibuf->index->lock and the insert buffer B-tree pages:
    
    #define SYNC_IBUF_MUTEX		370	/* ibuf_mutex */
    #define SYNC_IBUF_INDEX_TREE	360
    #define SYNC_IBUF_TREE_NODE_NEW	359
    #define SYNC_IBUF_TREE_NOD...
    669ff037
btr0cur.c 142 KB