• Sunny Bains's avatar
    Fix bug# 55543 - InnoDB Plugin: Signal 6: Assertion failure in file fil/fil0fil.c line 4306 · b37256b1
    Sunny Bains authored
    The bug is due to a double delete of a BLOB, once via:
    
        rollback -> btr_cur_pessimistic_delete()
    
    and the second time via purge.
    
    The bug is in row_upd_clust_rec_by_insert(). There we relinquish ownership
    of the non-updated BLOB columns in btr_cur_mark_extern_inherited_fields()
    before building the row entry that will be inserted and whose contents will
    be logged in the UNDO log. However, we don't set the BLOB column later to
    INHERITED so that a possible rollback will not free the original row's
    non-updated BLOB entries. This is because the condition that checks for
    that is in :
    
    	if (node->upd_ext) {}.
    
    node->upd_ext is non-NULL only if a BLOB column was updated and that column
    is part of some key ordering (see row_upd_replace()). This results in the
    non-update BLOB columns being deleted during a rollback and subsequently by
    purge again.
    
    rb://413
    b37256b1
btr0cur.h 30.7 KB