From 318a33598c7d6e3d3a1d5ac73075bfd03810aeb5 Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" Date: Mon, 7 Jun 1999 15:14:54 +0000 Subject: [PATCH] Concurrency... Highest one... DO NOT EVEN TRY TO DO PageGetMaxOffsetNumber BEFORE LockBuffer! -:) --- src/backend/access/nbtree/nbtree.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 4b472d0c5e..aa0b94ea8f 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -618,16 +618,19 @@ _bt_restscan(IndexScanDesc scan) Relation rel = scan->relation; BTScanOpaque so = (BTScanOpaque) scan->opaque; Buffer buf = so->btso_curbuf; - Page page = BufferGetPage(buf); + Page page; ItemPointer current = &(scan->currentItemData); OffsetNumber offnum = ItemPointerGetOffsetNumber(current), - maxoff = PageGetMaxOffsetNumber(page); - BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page); + maxoff; + BTPageOpaque opaque; ItemPointerData target = so->curHeapIptr; BTItem item; BlockNumber blkno; - LockBuffer(buf, BT_READ); + LockBuffer(buf, BT_READ); /* lock buffer first! */ + page = BufferGetPage(buf); + maxoff = PageGetMaxOffsetNumber(page); + opaque = (BTPageOpaque) PageGetSpecialPointer(page); /* * We use this as flag when first index tuple on page is deleted but -- 2.39.5