Commit 3950b703 authored by unknown's avatar unknown

ixed wrong unlock of tables (new bug)


sql/sql_delete.cc:
  Comment cleanup
sql/sql_insert.cc:
  Comment cleanup
sql/sql_load.cc:
  Comment cleanup
sql/sql_update.cc:
  Fixed wrong unlock of tables.
  (Unlock must be done after writing to binary log
parent 0bc6cf9e
...@@ -481,8 +481,10 @@ bool multi_delete::send_eof() ...@@ -481,8 +481,10 @@ bool multi_delete::send_eof()
/* reset used flags */ /* reset used flags */
thd->proc_info="end"; thd->proc_info="end";
/* We must invalidate the query cache before binlog writing and /*
ha_autocommit_... */ We must invalidate the query cache before binlog writing and
ha_autocommit_...
*/
if (deleted) if (deleted)
query_cache_invalidate3(thd, delete_tables, 1); query_cache_invalidate3(thd, delete_tables, 1);
......
...@@ -350,9 +350,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, ...@@ -350,9 +350,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
before binlog writing and ha_autocommit_... before binlog writing and ha_autocommit_...
*/ */
if (info.copied || info.deleted) if (info.copied || info.deleted)
{
query_cache_invalidate3(thd, table_list, 1); query_cache_invalidate3(thd, table_list, 1);
}
transactional_table= table->file->has_transactions(); transactional_table= table->file->has_transactions();
...@@ -1424,9 +1422,7 @@ void select_insert::send_error(uint errcode,const char *err) ...@@ -1424,9 +1422,7 @@ void select_insert::send_error(uint errcode,const char *err)
table->file->extra(HA_EXTRA_NO_CACHE); table->file->extra(HA_EXTRA_NO_CACHE);
table->file->activate_all_index(thd); table->file->activate_all_index(thd);
if (info.copied || info.deleted) if (info.copied || info.deleted)
{
query_cache_invalidate3(thd, table, 1); query_cache_invalidate3(thd, table, 1);
}
ha_rollback_stmt(thd); ha_rollback_stmt(thd);
} }
...@@ -1438,13 +1434,13 @@ bool select_insert::send_eof() ...@@ -1438,13 +1434,13 @@ bool select_insert::send_eof()
error=table->file->activate_all_index(thd); error=table->file->activate_all_index(thd);
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
/* We must invalidate the table in the query cache before binlog writing /*
and ha_autocommit_... */ We must invalidate the table in the query cache before binlog writing
and ha_autocommit_...
*/
if (info.copied || info.deleted) if (info.copied || info.deleted)
{
query_cache_invalidate3(thd, table, 1); query_cache_invalidate3(thd, table, 1);
}
/* Write to binlog before commiting transaction */ /* Write to binlog before commiting transaction */
if (mysql_bin_log.is_open()) if (mysql_bin_log.is_open())
......
...@@ -283,8 +283,10 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, ...@@ -283,8 +283,10 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
table->copy_blobs=0; table->copy_blobs=0;
thd->count_cuted_fields=0; /* Don`t calc cuted fields */ thd->count_cuted_fields=0; /* Don`t calc cuted fields */
/* We must invalidate the table in query cache before binlog writing and /*
ha_autocommit_... */ We must invalidate the table in query cache before binlog writing and
ha_autocommit_...
*/
query_cache_invalidate3(thd, table_list, 0); query_cache_invalidate3(thd, table_list, 0);
if (error) if (error)
......
...@@ -338,14 +338,7 @@ int mysql_update(THD *thd, ...@@ -338,14 +338,7 @@ int mysql_update(THD *thd,
This must be before binlog writing and ha_autocommit_... This must be before binlog writing and ha_autocommit_...
*/ */
if (updated) if (updated)
{
query_cache_invalidate3(thd, table_list, 1); query_cache_invalidate3(thd, table_list, 1);
}
if (thd->lock)
{
mysql_unlock_tables(thd, thd->lock);
thd->lock=0;
}
transactional_table= table->file->has_transactions(); transactional_table= table->file->has_transactions();
log_delayed= (transactional_table || table->tmp_table); log_delayed= (transactional_table || table->tmp_table);
...@@ -368,6 +361,12 @@ int mysql_update(THD *thd, ...@@ -368,6 +361,12 @@ int mysql_update(THD *thd,
error=1; error=1;
} }
if (thd->lock)
{
mysql_unlock_tables(thd, thd->lock);
thd->lock=0;
}
delete select; delete select;
free_underlaid_joins(thd, &thd->lex.select_lex); free_underlaid_joins(thd, &thd->lex.select_lex);
if (error >= 0) if (error >= 0)
......
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