#At file:///C:/bzr/mysql-6.0-falcon/
2778 Vladislav Vaintroub 2008-08-20
Fix a deadlock (reverse order of locks to active and committed transactions)
found by Kelly and Chris
modified:
storage/falcon/Transaction.cpp
=== modified file 'storage/falcon/Transaction.cpp'
--- a/storage/falcon/Transaction.cpp 2008-08-14 11:18:42 +0000
+++ b/storage/falcon/Transaction.cpp 2008-08-20 15:01:21 +0000
@@ -300,17 +300,19 @@ void Transaction::commit()
database->flushInversion(this);
// Transfer transaction from active list to committed list, set committed state
+
Sync syncCommitted(&transactionManager->committedTransactions.syncObject, "Transaction::commit(2)");
Sync syncActiveTransactions(&transactionManager->activeTransactions.syncObject, "Transaction::commit(3)");
- syncCommitted.lock(Exclusive);
+
syncActiveTransactions.lock(Exclusive);
+ syncCommitted.lock(Exclusive);
transactionManager->activeTransactions.remove(this);
transactionManager->committedTransactions.append(this);
state = Committed;
- syncActiveTransactions.unlock();
syncCommitted.unlock();
+ syncActiveTransactions.unlock();
database->commit(this);
| Thread |
|---|
| • bzr commit into mysql-6.0-falcon branch (vvaintroub:2778) | Vladislav Vaintroub | 20 Aug |