Don't try to use a unopened relation
authorAlvaro Herrera
Wed, 7 Nov 2012 19:23:39 +0000 (16:23 -0300)
committerAlvaro Herrera
Wed, 7 Nov 2012 19:24:20 +0000 (16:24 -0300)
Commit 4c9d0901 mistakenly introduced a call to
TransferPredicateLocksToHeapRelation() on an index relation that had
been closed a few lines above.  Moving up an index_open() call that's
below is enough to fix the problem.

Discovered by me while testing an unrelated patch.

src/backend/catalog/index.c

index dc3e2dc5149cb6d64e3e5eeaf606fbbdb9df173d..dd2408952b4bfdb2581203dbc2fd485c5f635e6a 100644 (file)
@@ -1464,6 +1464,8 @@ index_drop(Oid indexId, bool concurrent)
         * conflicts with existing predicate locks, so now is the time to move
         * them to the heap relation.
         */
+       userHeapRelation = heap_open(heapId, ShareUpdateExclusiveLock);
+       userIndexRelation = index_open(indexId, ShareUpdateExclusiveLock);
        TransferPredicateLocksToHeapRelation(userIndexRelation);
 
        /*
@@ -1473,9 +1475,6 @@ index_drop(Oid indexId, bool concurrent)
         */
        indexRelation = heap_open(IndexRelationId, RowExclusiveLock);
 
-       userHeapRelation = heap_open(heapId, ShareUpdateExclusiveLock);
-       userIndexRelation = index_open(indexId, ShareUpdateExclusiveLock);
-
        tuple = SearchSysCacheCopy1(INDEXRELID,
                                    ObjectIdGetDatum(indexId));
        if (!HeapTupleIsValid(tuple))