]> granicus.if.org Git - postgresql/commitdiff
Forgot to check page LSN and unlock buffer in btree_xlog_delete - fixed.
authorVadim B. Mikheev <vadim4o@yahoo.com>
Wed, 1 Nov 2000 20:39:58 +0000 (20:39 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Wed, 1 Nov 2000 20:39:58 +0000 (20:39 +0000)
(Thanks to Tatsuo Ishii for finding bug)

src/backend/access/nbtree/nbtree.c

index 3dbbc78b03514c6a2d7607ec538c167e4a91ba7b..fb437ac99f477794846a9691e0e31dced71f6061 100644 (file)
@@ -12,7 +12,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.68 2000/10/29 18:33:40 vadim Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.69 2000/11/01 20:39:58 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1018,8 +1018,18 @@ btree_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
        if (PageIsNew((PageHeader) page))
                elog(STOP, "btree_delete_redo: uninitialized page");
 
+       if (XLByteLE(lsn, PageGetLSN(page)))
+       {
+               UnlockAndReleaseBuffer(buffer);
+               return;
+       }
+
        PageIndexTupleDelete(page, ItemPointerGetOffsetNumber(&(xlrec->target.tid)));
 
+       PageSetLSN(page, lsn);
+       PageSetSUI(page, ThisStartUpID);
+       UnlockAndWriteBuffer(buffer);
+
        return;
 }