Commit 1434bc5d authored by guilhem@mysql.com's avatar guilhem@mysql.com

Fix for bug #136. We must write the

INSERT into u SELECT * from t
to the binlog
BEFORE unlocking t (which was read-locked at least in MyISAM),
and not the contrary.
parent 2be2914a
...@@ -4469,9 +4469,16 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure) ...@@ -4469,9 +4469,16 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
error=0; error=0;
if (!table) // If sending data to client if (!table) // If sending data to client
{ {
join_free(join); // Unlock all cursors //note that the call below may trigger binlog writing for some commands...
if (join->result->send_eof()) if (join->result->send_eof())
error= 1; // Don't send error error= 1; // Don't send error
/*
...which must be done before unlocking the read tables (otherwise
another thread may, quickly between unlock and binlog-write,
update the read table and write to the binlog, which will
result in badly ordered binlog events (and replication breaks).
*/
join_free(join); // Unlock all cursors
} }
DBUG_PRINT("info",("%ld records output",join->send_records)); DBUG_PRINT("info",("%ld records output",join->send_records));
} }
......
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