mirror of
https://github.com/postgres/postgres.git
synced 2025-12-10 14:22:35 +03:00
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
This commit is contained in:
@@ -53,7 +53,7 @@
|
|||||||
|
|
||||||
static inline void pgaio_io_update_state(PgAioHandle *ioh, PgAioHandleState new_state);
|
static inline void pgaio_io_update_state(PgAioHandle *ioh, PgAioHandleState new_state);
|
||||||
static void pgaio_io_reclaim(PgAioHandle *ioh);
|
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 void pgaio_io_wait_for_free(void);
|
||||||
static PgAioHandle *pgaio_io_from_wref(PgAioWaitRef *iow, uint64 *ref_generation);
|
static PgAioHandle *pgaio_io_from_wref(PgAioWaitRef *iow, uint64 *ref_generation);
|
||||||
static const char *pgaio_io_state_get_name(PgAioHandleState s);
|
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;
|
pgaio_my_backend->handed_out_io = ioh;
|
||||||
|
|
||||||
if (resowner)
|
if (resowner)
|
||||||
pgaio_io_resowner_register(ioh);
|
pgaio_io_resowner_register(ioh, resowner);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
@@ -406,13 +406,13 @@ pgaio_io_update_state(PgAioHandle *ioh, PgAioHandleState new_state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pgaio_io_resowner_register(PgAioHandle *ioh)
|
pgaio_io_resowner_register(PgAioHandle *ioh, struct ResourceOwnerData *resowner)
|
||||||
{
|
{
|
||||||
Assert(!ioh->resowner);
|
Assert(!ioh->resowner);
|
||||||
Assert(CurrentResourceOwner);
|
Assert(resowner);
|
||||||
|
|
||||||
ResourceOwnerRememberAioHandle(CurrentResourceOwner, &ioh->resowner_node);
|
ResourceOwnerRememberAioHandle(resowner, &ioh->resowner_node);
|
||||||
ioh->resowner = CurrentResourceOwner;
|
ioh->resowner = resowner;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
4
src/backend/utils/cache/catcache.c
vendored
4
src/backend/utils/cache/catcache.c
vendored
@@ -1668,7 +1668,7 @@ ReleaseCatCacheWithOwner(HeapTuple tuple, ResourceOwner resowner)
|
|||||||
|
|
||||||
ct->refcount--;
|
ct->refcount--;
|
||||||
if (resowner)
|
if (resowner)
|
||||||
ResourceOwnerForgetCatCacheRef(CurrentResourceOwner, &ct->tuple);
|
ResourceOwnerForgetCatCacheRef(resowner, &ct->tuple);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
#ifndef CATCACHE_FORCE_RELEASE
|
#ifndef CATCACHE_FORCE_RELEASE
|
||||||
@@ -2110,7 +2110,7 @@ ReleaseCatCacheListWithOwner(CatCList *list, ResourceOwner resowner)
|
|||||||
Assert(list->refcount > 0);
|
Assert(list->refcount > 0);
|
||||||
list->refcount--;
|
list->refcount--;
|
||||||
if (resowner)
|
if (resowner)
|
||||||
ResourceOwnerForgetCatCacheListRef(CurrentResourceOwner, list);
|
ResourceOwnerForgetCatCacheListRef(resowner, list);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
#ifndef CATCACHE_FORCE_RELEASE
|
#ifndef CATCACHE_FORCE_RELEASE
|
||||||
|
|||||||
Reference in New Issue
Block a user