From: Luis Soares Date: May 23 2011 11:35pm Subject: bzr commit into mysql-trunk branch (luis.soares:3101) Bug#12558519 List-Archive: http://lists.mysql.com/commits/137906 X-Bug: 12558519 Message-Id: <201105232335.p4NNZCLE028284@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #At file:///home/lsoares/Workspace/bzr/work/bugfixing/12558519/mysql-trunk-push/ based on revid:anitha.gopi@stripped 3101 Luis Soares 2011-05-24 [merge] BUG#12558519 Automerged mysql-5.5 into mysql-trunk. modified: sql/log_event.cc sql/rpl_rli.cc sql/table.cc === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2011-05-16 11:10:48 +0000 +++ b/sql/log_event.cc 2011-05-23 23:34:47 +0000 @@ -8797,6 +8797,7 @@ int Table_map_log_event::do_apply_event( m_field_metadata, m_field_metadata_size, m_null_bits, m_flags); table_list->m_tabledef_valid= TRUE; + table_list->m_conv_table= NULL; table_list->open_type= OT_BASE_ONLY; /* === modified file 'sql/rpl_rli.cc' --- a/sql/rpl_rli.cc 2011-05-19 08:48:55 +0000 +++ b/sql/rpl_rli.cc 2011-05-23 23:34:47 +0000 @@ -984,6 +984,16 @@ void Relay_log_info::clear_tables_to_loc tables_to_lock->m_tabledef.table_def::~table_def(); tables_to_lock->m_tabledef_valid= FALSE; } + + /* + If blob fields were used during conversion of field values + from the master table into the slave table, then we need to + free the memory used temporarily to store their values before + copying into the slave's table. + */ + if (tables_to_lock->m_conv_table) + free_blobs(tables_to_lock->m_conv_table); + tables_to_lock= static_cast(tables_to_lock->next_global); tables_to_lock_count--; === modified file 'sql/table.cc' --- a/sql/table.cc 2011-05-21 09:31:19 +0000 +++ b/sql/table.cc 2011-05-23 23:34:47 +0000 @@ -2225,7 +2225,15 @@ void free_blobs(register TABLE *table) for (ptr= table->s->blob_field, end=ptr + table->s->blob_fields ; ptr != end ; ptr++) - ((Field_blob*) table->field[*ptr])->free(); + { + /* + Reduced TABLE objects which are used by row-based replication for + type conversion might have some fields missing. Skip freeing BLOB + buffers for such missing fields. + */ + if (table->field[*ptr]) + ((Field_blob*) table->field[*ptr])->free(); + } } No bundle (reason: revision is a merge (you can force generation of a bundle with env var BZR_FORCE_BUNDLE=1)).