I thought about adding an assertion (or even a precautionary elog(ERROR)) to ReadBuffer to verify that the returned buffer is indeed valid, but I didn't end up doing it. Feel free to raise your hand if you think this is a good idea.
Barring any objections, I'll apply the attached patch to HEAD tomorrow.
-Neil
# Old manifest: 92128e273bd6b087288df4682774aa91c04a3142
# New manifest: 04cf2873af05d24e9f9d64ea0c0ffb329c383c04
# Summary of changes:
#
# patch src/backend/access/heap/heapam.c
# from 35dbe0979f6da3660c24d7c771c536d1b9654804
# to f09a58420b1e164abe3acec04f67728fbfc5275f
#
# patch src/backend/commands/analyze.c
# from f45c8a8b8aa9ddea9f11c0ac81766c70459765cf
# to 6a6d58ea5ad5bbe78e8929d383248d589e55a20d
#
# patch src/backend/commands/sequence.c
# from 3875f769215f8b3cb4688b7d8b404c7c07d0f577
# to d491c79eb9f33cdafcc6ac477051068eff49a656
#
# patch src/backend/commands/trigger.c
# from 3b939c53de75beddf950261f31b6538c366f6d37
# to ba6f66c7449a2bb99807e481199ced25f9af79d9
#
--- src/backend/access/heap/heapam.c
+++ src/backend/access/heap/heapam.c
@@ -191,8 +191,6 @@
*buffer = ReleaseAndReadBuffer(*buffer,
relation,
ItemPointerGetBlockNumber(tid));
- if (!BufferIsValid(*buffer))
- elog(ERROR, "ReadBuffer failed");
LockBuffer(*buffer, BUFFER_LOCK_SHARE);
@@ -226,8 +224,6 @@
*buffer = ReleaseAndReadBuffer(*buffer,
relation,
page);
- if (!BufferIsValid(*buffer))
- elog(ERROR, "ReadBuffer failed");
LockBuffer(*buffer, BUFFER_LOCK_SHARE);
@@ -266,8 +264,6 @@
*buffer = ReleaseAndReadBuffer(*buffer,
relation,
page);
- if (!BufferIsValid(*buffer))
- elog(ERROR, "ReadBuffer failed");
LockBuffer(*buffer, BUFFER_LOCK_SHARE);
@@ -360,8 +358,6 @@
*buffer = ReleaseAndReadBuffer(*buffer,
relation,
page);
- if (!BufferIsValid(*buffer))
- elog(ERROR, "ReadBuffer failed");
LockBuffer(*buffer, BUFFER_LOCK_SHARE);
dp = (Page) BufferGetPage(*buffer);
@@ -941,11 +939,6 @@
buffer = ReleaseAndReadBuffer(*userbuf, relation,
ItemPointerGetBlockNumber(tid));
- if (!BufferIsValid(buffer))
- elog(ERROR, "ReadBuffer(\"%s\", %lu) failed",
- RelationGetRelationName(relation),
- (unsigned long) ItemPointerGetBlockNumber(tid));
-
/*
* Need share lock on buffer to examine tuple commit status.
*/
@@ -1049,14 +1044,7 @@
* get the buffer from the relation descriptor Note that this does a
* buffer pin.
*/
-
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
-
- if (!BufferIsValid(buffer))
- elog(ERROR, "ReadBuffer(\"%s\", %lu) failed",
- RelationGetRelationName(relation),
- (unsigned long) ItemPointerGetBlockNumber(tid));
-
LockBuffer(buffer, BUFFER_LOCK_SHARE);
/*
@@ -1304,10 +1297,6 @@
Assert(ItemPointerIsValid(tid));
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
-
- if (!BufferIsValid(buffer))
- elog(ERROR, "ReadBuffer failed");
-
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
dp = (PageHeader) BufferGetPage(buffer);
@@ -1528,8 +1524,6 @@
Assert(ItemPointerIsValid(otid));
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(otid));
- if (!BufferIsValid(buffer))
- elog(ERROR, "ReadBuffer failed");
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
dp = (PageHeader) BufferGetPage(buffer);
@@ -1863,10 +1861,6 @@
int result;
*buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
-
- if (!BufferIsValid(*buffer))
- elog(ERROR, "ReadBuffer failed");
-
LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE);
dp = (PageHeader) BufferGetPage(*buffer);
--- src/backend/commands/analyze.c
+++ src/backend/commands/analyze.c
@@ -811,8 +811,6 @@
* tuples.
*/
targbuffer = ReadBuffer(onerel, targblock);
- if (!BufferIsValid(targbuffer))
- elog(ERROR, "ReadBuffer failed");
LockBuffer(targbuffer, BUFFER_LOCK_SHARE);
targpage = BufferGetPage(targbuffer);
maxoffset = PageGetMaxOffsetNumber(targpage);
--- src/backend/commands/sequence.c
+++ src/backend/commands/sequence.c
@@ -192,10 +192,6 @@
/* Initialize first page of relation with special magic number */
buf = ReadBuffer(rel, P_NEW);
-
- if (!BufferIsValid(buf))
- elog(ERROR, "ReadBuffer failed");
-
Assert(BufferGetBlockNumber(buf) == 0);
page = (PageHeader) BufferGetPage(buf);
@@ -850,9 +846,6 @@
Form_pg_sequence seq;
*buf = ReadBuffer(rel, 0);
- if (!BufferIsValid(*buf))
- elog(ERROR, "ReadBuffer failed");
-
LockBuffer(*buf, BUFFER_LOCK_EXCLUSIVE);
page = (PageHeader) BufferGetPage(*buf);
--- src/backend/commands/trigger.c
+++ src/backend/commands/trigger.c
@@ -1625,9 +1625,6 @@
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
- if (!BufferIsValid(buffer))
- elog(ERROR, "ReadBuffer failed");
-
dp = (PageHeader) BufferGetPage(buffer);
lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(tid));
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])
