summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeikki Linnakangas2025-12-10 09:43:16 +0000
committerHeikki Linnakangas2025-12-10 09:43:16 +0000
commitfa44b8b7fbb7eb0f13546aa13976f9919a4ca201 (patch)
tree2604cef1ab76b56e8abb421b6eb8c0592fdd8e56
parent8268e66ac64cb846517580e0808f971343391fdf (diff)
Fix some near-bugs related to ResourceOwner function arguments
These functions took a ResourceOwner argument, but only checked if it was NULL, and then used CurrentResourceOwner for the actual work. Surely the intention was to use the passed-in resource owner. All current callers passed CurrentResourceOwner or NULL, so this has no consequences at the moment, but it's an accident waiting to happen for future caller and extensions. Author: Matthias van de Meent <boekewurm+postgres@gmail.com> Discussion: https://www.postgresql.org/message-id/CAEze2Whnfv8VuRZaohE-Af+GxBA1SNfD_rXfm84Jv-958UCcJA@mail.gmail.com Backpatch-through: 17
-rw-r--r--src/backend/storage/aio/aio.c12
-rw-r--r--src/backend/utils/cache/catcache.c4
2 files changed, 8 insertions, 8 deletions
diff --git a/src/backend/storage/aio/aio.c b/src/backend/storage/aio/aio.c
index a12b785ade6..c4c2d8cc4b1 100644
--- a/src/backend/storage/aio/aio.c
+++ b/src/backend/storage/aio/aio.c
@@ -53,7 +53,7 @@
static inline void pgaio_io_update_state(PgAioHandle *ioh, PgAioHandleState new_state);
static void pgaio_io_reclaim(PgAioHandle *ioh);
-static void pgaio_io_resowner_register(PgAioHandle *ioh);
+static void pgaio_io_resowner_register(PgAioHandle *ioh, struct ResourceOwnerData *resowner);
static void pgaio_io_wait_for_free(void);
static PgAioHandle *pgaio_io_from_wref(PgAioWaitRef *iow, uint64 *ref_generation);
static const char *pgaio_io_state_get_name(PgAioHandleState s);
@@ -217,7 +217,7 @@ pgaio_io_acquire_nb(struct ResourceOwnerData *resowner, PgAioReturn *ret)
pgaio_my_backend->handed_out_io = ioh;
if (resowner)
- pgaio_io_resowner_register(ioh);
+ pgaio_io_resowner_register(ioh, resowner);
if (ret)
{
@@ -406,13 +406,13 @@ pgaio_io_update_state(PgAioHandle *ioh, PgAioHandleState new_state)
}
static void
-pgaio_io_resowner_register(PgAioHandle *ioh)
+pgaio_io_resowner_register(PgAioHandle *ioh, struct ResourceOwnerData *resowner)
{
Assert(!ioh->resowner);
- Assert(CurrentResourceOwner);
+ Assert(resowner);
- ResourceOwnerRememberAioHandle(CurrentResourceOwner, &ioh->resowner_node);
- ioh->resowner = CurrentResourceOwner;
+ ResourceOwnerRememberAioHandle(resowner, &ioh->resowner_node);
+ ioh->resowner = resowner;
}
/*
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 84f1f80607e..1d09c66ac95 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -1668,7 +1668,7 @@ ReleaseCatCacheWithOwner(HeapTuple tuple, ResourceOwner resowner)
ct->refcount--;
if (resowner)
- ResourceOwnerForgetCatCacheRef(CurrentResourceOwner, &ct->tuple);
+ ResourceOwnerForgetCatCacheRef(resowner, &ct->tuple);
if (
#ifndef CATCACHE_FORCE_RELEASE
@@ -2110,7 +2110,7 @@ ReleaseCatCacheListWithOwner(CatCList *list, ResourceOwner resowner)
Assert(list->refcount > 0);
list->refcount--;
if (resowner)
- ResourceOwnerForgetCatCacheListRef(CurrentResourceOwner, list);
+ ResourceOwnerForgetCatCacheListRef(resowner, list);
if (
#ifndef CATCACHE_FORCE_RELEASE