• Sunny Bains's avatar
    Merge from -c3476 mysql-5.1-security. · 97aa1215
    Sunny Bains authored
         ------------------------------------------------------------
         revno: 3476
         committer: Sunny Bains <Sunny.Bains@Oracle.Com>
         branch nick: 5.1-security
         timestamp: Thu 2010-08-05 19:18:17 +1000
         message:
           Fix bug# 55543 - InnoDB Plugin: Signal 6: Assertion failure in file fil/fil0fil.c line 4306
    
             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
    97aa1215
row0upd.c 57.4 KB