Fix bug in GIN WAL redo cleanup function: don't free fake relcache entry
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Tue, 9 Feb 2010 20:31:24 +0000 (20:31 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Tue, 9 Feb 2010 20:31:24 +0000 (20:31 +0000)
while it's still being used.

Backpatch to 8.4, where the fake relcache method was introduced.

src/backend/access/gin/ginxlog.c

index eb90ddd684ebd129b36ba8cf3a765ee55fca521e..cff5bc8bd59136225458f8460ee54050a8f0f82a 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *          $PostgreSQL: pgsql/src/backend/access/gin/ginxlog.c,v 1.21 2010/01/02 16:57:33 momjian Exp $
+ *          $PostgreSQL: pgsql/src/backend/access/gin/ginxlog.c,v 1.22 2010/02/09 20:31:24 heikki Exp $
  *-------------------------------------------------------------------------
  */
 #include "postgres.h"
@@ -777,8 +777,6 @@ ginContinueSplit(ginIncompleteSplit *split)
                                       GinPageGetOpaque(page)->maxoff))->key;
    }
 
-   FreeFakeRelcacheEntry(reln);
-
    btree.rightblkno = split->rightBlkno;
 
    stack.blkno = split->leftBlkno;
@@ -789,6 +787,8 @@ ginContinueSplit(ginIncompleteSplit *split)
    findParents(&btree, &stack, split->rootBlkno);
    ginInsertValue(&btree, stack.parent);
 
+   FreeFakeRelcacheEntry(reln);
+
    UnlockReleaseBuffer(buffer);
 }