List:Commits« Previous MessageNext Message »
From:Christopher Powers Date:October 4 2008 2:10am
Subject:bzr commit into mysql-6.0-falcon-team branch (cpowers:2853) Bug#39846
View as plain text  
#At file:///home/cpowers/work/dev/dev-08/mysql/

 2853 Christopher Powers	2008-10-03
      Bug#39846, "Falcon: Concurrent online alter causes assertion in
SRLUpdateIndex::append()"
modified:
  storage/falcon/DeferredIndex.cpp
  storage/falcon/SRLUpdateIndex.cpp

per-file messages:
  storage/falcon/DeferredIndex.cpp
    Changed shared lock to exclusive lock in DeferredIndex::detachIndex(). Attributes
should never be nulled out if another thread may be using it.
  storage/falcon/SRLUpdateIndex.cpp
    SRLUpdateIndex::append() -- Get shared lock on DeferredIndex
=== modified file 'storage/falcon/DeferredIndex.cpp'
--- a/storage/falcon/DeferredIndex.cpp	2008-10-02 23:20:47 +0000
+++ b/storage/falcon/DeferredIndex.cpp	2008-10-04 00:10:34 +0000
@@ -819,7 +819,7 @@ void DeferredIndex::scanIndex(IndexKey *
 void DeferredIndex::detachIndex(void)
 {
 	Sync sync(&syncObject, "DeferredIndex::detachIndex");
-	sync.lock(Shared);
+	sync.lock(Exclusive); // was Shared
 	index = NULL;
 }
 

=== modified file 'storage/falcon/SRLUpdateIndex.cpp'
--- a/storage/falcon/SRLUpdateIndex.cpp	2008-07-15 18:57:27 +0000
+++ b/storage/falcon/SRLUpdateIndex.cpp	2008-10-04 00:10:34 +0000
@@ -40,14 +40,29 @@ SRLUpdateIndex::~SRLUpdateIndex(void)
 
 void SRLUpdateIndex::append(DeferredIndex* deferredIndex)
 {
+	uint indexId;
+	int idxVersion;
+	int tableSpaceId;
+
+	Sync syncDI(&deferredIndex->syncObject, "SRLUpdateIndex::append");
+	syncDI.lock(Shared);
+
+	if (!deferredIndex->index)
+		return;
+	else
+		{
+		indexId = deferredIndex->index->indexId;
+		idxVersion = deferredIndex->index->indexVersion;
+		tableSpaceId = deferredIndex->index->dbb->tableSpaceId;
+		}
+
+	syncDI.unlock();
+
 	Sync syncIndexes(&log->syncIndexes, "SRLUpdateIndex::append(1)");
 	syncIndexes.lock(Shared);
 
 	Transaction *transaction = deferredIndex->transaction;
 	DeferredIndexWalker walker(deferredIndex, NULL);
-	uint indexId = deferredIndex->index->indexId;
-	int idxVersion = deferredIndex->index->indexVersion;
-	int tableSpaceId = deferredIndex->index->dbb->tableSpaceId;
 	uint64 virtualOffset = 0;
 	uint64 virtualOffsetAtEnd = 0;
 

Thread
bzr commit into mysql-6.0-falcon-team branch (cpowers:2853) Bug#39846Christopher Powers4 Oct