From: Date: April 25 2008 5:44am Subject: bk commit into 6.0 tree (cpowers:1.2645) BUG#36330 List-Archive: http://lists.mysql.com/commits/45982 X-Bug: 36330 Message-Id: <20080425034424.124A41DB0667@xeno.mysql.com> Below is the list of changes that have just been committed into a local 6.0 repository of cpowers. When cpowers does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet@stripped, 2008-04-24 22:44:18-05:00, cpowers@stripped +4 -0 Bug #36330: Falcon DBT2 crash in Transaction::needToLock - Added syncPrior protection to Transaction::needToLock() - Removed RecordVersion::getSyncPrior() - Record::getSyncPrior() now returns syncObject storage/falcon/Record.cpp@stripped, 2008-04-24 22:44:16-05:00, cpowers@stripped +1 -1 Record::getSyncPrior() now returns syncObject pointer rather than NULL. storage/falcon/RecordVersion.cpp@stripped, 2008-04-24 22:44:16-05:00, cpowers@stripped +0 -4 Removed getSyncPrior(). storage/falcon/RecordVersion.h@stripped, 2008-04-24 22:44:16-05:00, cpowers@stripped +0 -1 Removed getSyncPrior(). storage/falcon/Transaction.cpp@stripped, 2008-04-24 22:44:16-05:00, cpowers@stripped +3 -0 Transaction::needToLock() - Added syncPrior protection to prior record version scan. diff -Nrup a/storage/falcon/Record.cpp b/storage/falcon/Record.cpp --- a/storage/falcon/Record.cpp 2008-04-22 14:46:06 -05:00 +++ b/storage/falcon/Record.cpp 2008-04-24 22:44:16 -05:00 @@ -956,5 +956,5 @@ int Record::getSize(void) SyncObject* Record::getSyncPrior(void) { - return NULL; + return format->table->getSyncPrior(this); } diff -Nrup a/storage/falcon/RecordVersion.cpp b/storage/falcon/RecordVersion.cpp --- a/storage/falcon/RecordVersion.cpp 2008-04-11 21:22:43 -05:00 +++ b/storage/falcon/RecordVersion.cpp 2008-04-24 22:44:16 -05:00 @@ -457,7 +457,3 @@ void RecordVersion::serialize(Serialize* stream->putInt(2); } -SyncObject* RecordVersion::getSyncPrior() -{ - return format->table->getSyncPrior(this); -} diff -Nrup a/storage/falcon/RecordVersion.h b/storage/falcon/RecordVersion.h --- a/storage/falcon/RecordVersion.h 2008-04-09 09:51:56 -05:00 +++ b/storage/falcon/RecordVersion.h 2008-04-24 22:44:16 -05:00 @@ -56,7 +56,6 @@ public: virtual void print(void); virtual int getSize(void); virtual void serialize(Serialize* stream); - virtual SyncObject* getSyncPrior(); void commit(); diff -Nrup a/storage/falcon/Transaction.cpp b/storage/falcon/Transaction.cpp --- a/storage/falcon/Transaction.cpp 2008-04-11 21:22:44 -05:00 +++ b/storage/falcon/Transaction.cpp 2008-04-24 22:44:16 -05:00 @@ -748,6 +748,9 @@ bool Transaction::needToLock(Record* rec { // Find the first visible record version + Sync syncPrior(record->getSyncPrior(), "Transaction::needToLock"); + syncPrior.lock(Shared); + for (Record* candidate = record; candidate != NULL; candidate = candidate->getPriorVersion())