aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/nbtree/nbtscan.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/nbtree/nbtscan.c')
-rw-r--r--src/backend/access/nbtree/nbtscan.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/backend/access/nbtree/nbtscan.c b/src/backend/access/nbtree/nbtscan.c
index 79e0c879d04..1e92e2571db 100644
--- a/src/backend/access/nbtree/nbtscan.c
+++ b/src/backend/access/nbtree/nbtscan.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.21 1999/05/25 16:07:29 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.22 1999/05/25 18:20:30 vadim Exp $
*
*
* NOTES
@@ -30,7 +30,6 @@
#include <postgres.h>
#include <storage/bufpage.h>
-#include <storage/bufmgr.h>
#include <access/nbtree.h>
typedef struct BTScanListData
@@ -134,6 +133,11 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
ItemPointerSetInvalid(&(so->curHeapIptr));
else
{
+ /*
+ * We have to lock buffer before _bt_step
+ * and unlock it after that.
+ */
+ LockBuffer(buf, BT_READ);
_bt_step(scan, &buf, BackwardScanDirection);
so->btso_curbuf = buf;
if (ItemPointerIsValid(current))
@@ -143,6 +147,7 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
PageGetItemId(pg, ItemPointerGetOffsetNumber(current)));
so->curHeapIptr = btitem->bti_itup.t_tid;
+ LockBuffer(buf, BUFFER_LOCK_UNLOCK);
}
}
}
@@ -169,6 +174,7 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
so->btso_curbuf = so->btso_mrkbuf;
so->btso_mrkbuf = buf;
buf = so->btso_curbuf;
+ LockBuffer(buf, BT_READ); /* as above */
_bt_step(scan, &buf, BackwardScanDirection);
@@ -184,6 +190,7 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno)
PageGetItemId(pg, ItemPointerGetOffsetNumber(current)));
so->mrkHeapIptr = btitem->bti_itup.t_tid;
+ LockBuffer(buf, BUFFER_LOCK_UNLOCK); /* as above */
}
}
}