#At file:///home/cpowers/work/dev/dev-05/mysql/
3012 Christopher Powers 2009-02-10
Bug #36442, "Falcon: crash during optimize table"
Refined Table::optimize() to release each base record.
Records having newer record versions were not being released.
modified:
storage/falcon/Table.cpp
per-file messages:
storage/falcon/Table.cpp
Table::optimize()
fetchNext() returns base record with additional use count.
fetchVersion() returns record version without use count.
Only call release() for the base record to
ensure it is released from memory.
=== modified file 'storage/falcon/Table.cpp'
--- a/storage/falcon/Table.cpp 2009-02-09 10:33:13 +0000
+++ b/storage/falcon/Table.cpp 2009-02-10 22:00:13 +0000
@@ -3576,16 +3576,15 @@ void Table::optimize(Connection *connect
int recordNumber = 0;
Transaction *transaction = connection->getTransaction();
- for (Record *record; (record = fetchNext(recordNumber));)
+ for (Record *candidate; (candidate = fetchNext(recordNumber));)
{
- recordNumber = record->recordNumber + 1;
- record = record->fetchVersion(transaction);
+ recordNumber = candidate->recordNumber + 1;
+ Record *record = candidate->fetchVersion(transaction);
if (record)
- {
- record->release(); // no need to keep it around
++count;
- }
+
+ candidate->release(); // no need to keep it around
}
cardinality = count;
| Thread |
|---|
| • bzr commit into mysql-6.0-falcon-team branch (christopher.powers:3012)Bug#36442 | Christopher Powers | 10 Feb |