#At file:///home/cpowers/work/dev/dev-03/mysql/
2968 Christopher Powers 2009-01-20
Bug #42131 falcon_backlog test crashes in Record::getEncodedValue
Record chill now exclusively locks the record version chain before deleting
the record memory.
modified:
storage/falcon/SRLUpdateRecords.cpp
per-file messages:
storage/falcon/SRLUpdateRecords.cpp
SRLUpdateRecords::chill() now locks syncPrior before chilling.
It uses a 50ms wait to defer to other tasks already accessing the record chain. If
an exclusive lock cannot be acquired, the record is not chilled.
This is a provisional resolution to a syncPrior/syncWrite deadlock that
can be triggered by a low-level thaw on a concurrent thread already
holding syncPrior. Such a deadlock can occur while pruning record versions
during during a scavenge.
=== modified file 'storage/falcon/SRLUpdateRecords.cpp'
--- a/storage/falcon/SRLUpdateRecords.cpp 2009-01-17 08:22:44 +0000
+++ b/storage/falcon/SRLUpdateRecords.cpp 2009-01-21 00:35:50 +0000
@@ -42,6 +42,13 @@ bool SRLUpdateRecords::chill(Transaction
{
Sync syncPrior(record->getSyncPrior(), "SRLUpdateRecords::chill");
+ // Exclusively lock the record chain before chilling the record. Use a 50ms wait to defer
+ // to other tasks accessing the record chain.
+ //
+ // This is a provisional resolution to a syncPrior/syncWrite deadlock that can be triggered
+ // by a low-level thaw on a concurrent thread already holding syncPrior. Such a deadlock
+ // can occur while pruning record versions during during a scavenge.
+
try
{
syncPrior.lock(Exclusive, 50);
| Thread |
|---|
| • bzr commit into mysql-6.0-falcon-team branch (christopher.powers:2968)Bug#42131 | Christopher Powers | 21 Jan |