aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/storage/buffer/localbuf.c5
-rw-r--r--src/backend/utils/resowner/resowner.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c
index 1be4f4f8daf..1f02fed250e 100644
--- a/src/backend/storage/buffer/localbuf.c
+++ b/src/backend/storage/buffer/localbuf.c
@@ -374,6 +374,9 @@ ExtendBufferedRelLocal(BufferManagerRelation bmr,
victim_buf_id = -buffers[i] - 1;
victim_buf_hdr = GetLocalBufferDescriptor(victim_buf_id);
+ /* in case we need to pin an existing buffer below */
+ ResourceOwnerEnlarge(CurrentResourceOwner);
+
InitBufferTag(&tag, &bmr.smgr->smgr_rlocator.locator, fork, first_block + i);
hresult = (LocalBufferLookupEnt *)
@@ -646,6 +649,8 @@ InitLocalBuffers(void)
* XXX: We could have a slightly more efficient version of PinLocalBuffer()
* that does not support adjusting the usagecount - but so far it does not
* seem worth the trouble.
+ *
+ * Note that ResourceOwnerEnlarge() must have been done already.
*/
bool
PinLocalBuffer(BufferDesc *buf_hdr, bool adjust_usagecount)
diff --git a/src/backend/utils/resowner/resowner.c b/src/backend/utils/resowner/resowner.c
index 67cc332e80d..aa199b23ffd 100644
--- a/src/backend/utils/resowner/resowner.c
+++ b/src/backend/utils/resowner/resowner.c
@@ -548,8 +548,13 @@ ResourceOwnerRemember(ResourceOwner owner, Datum value, const ResourceOwnerDesc
/*
* Forget that an object is owned by a ResourceOwner
*
- * Note: if same resource ID is associated with the ResourceOwner more than
+ * Note: If same resource ID is associated with the ResourceOwner more than
* once, one instance is removed.
+ *
+ * Note: Forgetting a resource does not guarantee that there is room to
+ * remember a new resource. One exception is when you forget the most
+ * recently remembered resource; that does make room for a new remember call.
+ * Some code callers rely on that exception.
*/
void
ResourceOwnerForget(ResourceOwner owner, Datum value, const ResourceOwnerDesc *kind)