#At file:///C:/Work/bzr/Merge/MYSQL-~1.0-F/ based on revid:christopher.powers@stripped
2766 Kevin Lewis 2009-08-18
Bug#46496 - There are a number of places in the Falcon code where
TransactionManager::committedTransactions.syncObject is held while
locking Transaction::syncRecords. So Transaction::thawAll() should
not hold Transaction::syncRecords while locking
TransactionManager::activeTransactions.syncObject,
which is often held while locking committedTransactions.syncObject.
It can cause a deadlock.
modified:
storage/falcon/Transaction.cpp
=== modified file 'storage/falcon/Transaction.cpp'
--- a/storage/falcon/Transaction.cpp 2009-07-28 15:53:09 +0000
+++ b/storage/falcon/Transaction.cpp 2009-08-18 22:01:40 +0000
@@ -1614,14 +1614,14 @@ bool Transaction::committedBefore(TransI
void Transaction::thawAll(void)
{
- Sync syncRec(&syncRecords,"Transaction::thawAll");
- syncRec.lock(Shared);
-
Sync syncActive(&database->transactionManager->activeTransactions.syncObject, "Transaction::thawAll");
syncActive.lock(Shared);
TransId oldestActiveTransaction = database->transactionManager->findOldestInActiveList();
syncActive.unlock();
+ Sync syncRec(&syncRecords,"Transaction::thawAll");
+ syncRec.lock(Shared);
+
int totalRecords = 0;
int totalThawed = 0;
Attachment: [text/bzr-bundle] bzr/kevin.lewis@sun.com-20090818220140-rbwhhsiet2f1rbpy.bundle
| Thread |
|---|
| • bzr commit into mysql-6.0-falcon-team branch (kevin.lewis:2766)Bug#46496 | Kevin Lewis | 19 Aug |