List:Commits« Previous MessageNext Message »
From:Christopher Powers Date:February 3 2009 6:11pm
Subject:bzr commit into mysql-6.0-falcon-team branch (christopher.powers:2999)
Bug#36442
View as plain text  
#At file:///home/cpowers/work/dev/dev-04/mysql/

 2999 Christopher Powers	2009-02-03
      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-03 07:23:08 +0000
+++ b/storage/falcon/Table.cpp	2009-02-03 18:10:48 +0000
@@ -3575,16 +3575,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:2999)Bug#36442Christopher Powers3 Feb