Commit bb2b8f42 authored by unknown's avatar unknown

Fixed memory leak (found by rpl_row_inexist_tbl)


sql/handler.cc:
  Made code more portable
parent ae9300a1
...@@ -3268,10 +3268,11 @@ namespace ...@@ -3268,10 +3268,11 @@ namespace
if (thd->get_binlog_table_maps() == 0) if (thd->get_binlog_table_maps() == 0)
{ {
MYSQL_LOCK *const locks[] = { MYSQL_LOCK *locks[3];
thd->extra_lock, thd->lock, thd->locked_tables locks[0]= thd->extra_lock;
}; locks[1]= thd->lock;
for (my_ptrdiff_t i= 0 ; i < sizeof(locks)/sizeof(*locks) ; ++i ) locks[2]= thd->locked_tables;
for (uint i= 0 ; i < sizeof(locks)/sizeof(*locks) ; ++i )
{ {
MYSQL_LOCK const *const lock= locks[i]; MYSQL_LOCK const *const lock= locks[i];
if (lock == NULL) if (lock == NULL)
......
...@@ -5871,7 +5871,7 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli) ...@@ -5871,7 +5871,7 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli)
table_list->db, table_list->table_name); table_list->db, table_list->table_name);
thd->query_error= 1; thd->query_error= 1;
} }
DBUG_RETURN(error); goto err;
} }
m_table= table_list->table; m_table= table_list->table;
...@@ -5948,7 +5948,8 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli) ...@@ -5948,7 +5948,8 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli)
} }
thd->query_error= 1; thd->query_error= 1;
DBUG_RETURN(ERR_BAD_TABLE_DEF); error= ERR_BAD_TABLE_DEF;
goto err;
} }
/* /*
...@@ -5956,12 +5957,10 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli) ...@@ -5956,12 +5957,10 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli)
locked by linking the table into the list of tables to lock, and locked by linking the table into the list of tables to lock, and
tell the RLI that we are touching a table. tell the RLI that we are touching a table.
*/ */
if (!error) table_list->next_global= table_list->next_local= rli->tables_to_lock;
{ rli->tables_to_lock= table_list;
table_list->next_global= table_list->next_local= rli->tables_to_lock; rli->tables_to_lock_count++;
rli->tables_to_lock= table_list; /* 'memory' is freed in clear_tables_to_lock */
rli->tables_to_lock_count++;
}
} }
/* /*
...@@ -5976,7 +5975,10 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli) ...@@ -5976,7 +5975,10 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli)
if (likely(!error)) if (likely(!error))
rli->inc_event_relay_log_pos(); rli->inc_event_relay_log_pos();
DBUG_RETURN(error);
err:
my_free((gptr) memory, MYF(MY_WME));
DBUG_RETURN(error); DBUG_RETURN(error);
} }
#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */ #endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment