Commit e436736d authored by monty@mashka.mysql.fi's avatar monty@mashka.mysql.fi

ixed wrong unlock of tables (new bug)

parent beb29e1b
......@@ -481,8 +481,10 @@ bool multi_delete::send_eof()
/* reset used flags */
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)
query_cache_invalidate3(thd, delete_tables, 1);
......
......@@ -350,9 +350,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
before binlog writing and ha_autocommit_...
*/
if (info.copied || info.deleted)
{
query_cache_invalidate3(thd, table_list, 1);
}
transactional_table= table->file->has_transactions();
......@@ -1424,9 +1422,7 @@ void select_insert::send_error(uint errcode,const char *err)
table->file->extra(HA_EXTRA_NO_CACHE);
table->file->activate_all_index(thd);
if (info.copied || info.deleted)
{
query_cache_invalidate3(thd, table, 1);
}
ha_rollback_stmt(thd);
}
......@@ -1438,13 +1434,13 @@ bool select_insert::send_eof()
error=table->file->activate_all_index(thd);
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)
{
query_cache_invalidate3(thd, table, 1);
}
/* Write to binlog before commiting transaction */
if (mysql_bin_log.is_open())
......
......@@ -283,8 +283,10 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
table->copy_blobs=0;
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);
if (error)
......
......@@ -338,14 +338,7 @@ int mysql_update(THD *thd,
This must be before binlog writing and ha_autocommit_...
*/
if (updated)
{
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();
log_delayed= (transactional_table || table->tmp_table);
......@@ -368,6 +361,12 @@ int mysql_update(THD *thd,
error=1;
}
if (thd->lock)
{
mysql_unlock_tables(thd, thd->lock);
thd->lock=0;
}
delete select;
free_underlaid_joins(thd, &thd->lex.select_lex);
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