From 855ffa0be0955399d40e3adb19eb0f7bc30d6cc4 Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" Date: Wed, 1 Nov 2000 20:39:58 +0000 Subject: [PATCH] Forgot to check page LSN and unlock buffer in btree_xlog_delete - fixed. (Thanks to Tatsuo Ishii for finding bug) --- src/backend/access/nbtree/nbtree.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 3dbbc78b03..fb437ac99f 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -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; }