44 #define FileGetDatum(file) Int32GetDatum(file)
45 #define DatumGetFile(datum) ((File) DatumGetInt32(datum))
46 #define BufferGetDatum(buffer) Int32GetDatum(buffer)
47 #define DatumGetBuffer(datum) ((Buffer) DatumGetInt32(datum))
79 #define RESARRAY_INIT_SIZE 16
84 #define RESARRAY_MAX_ARRAY 64
85 #define RESARRAY_IS_ARRAY(resarr) ((resarr)->capacity <= RESARRAY_MAX_ARRAY)
91 #define RESARRAY_MAX_ITEMS(capacity) \
92 ((capacity) <= RESARRAY_MAX_ARRAY ? (capacity) : (capacity)/4 * 3)
110 #define MAX_RESOWNER_LOCKS 15
232 newcap *
sizeof(
Datum));
233 for (
i = 0;
i < newcap;
i++)
242 if (olditemsarr != NULL)
251 for (
i = 0;
i < oldcap;
i++)
319 if (lastidx < resarr->
nitems &&
344 if (lastidx < resarr->capacity &&
536 elog(
PANIC,
"lost track of buffer IO on buffer %d",
res);
645 locks = owner->
locks;
729 item->
callback(phase, isCommit, isTopLevel, item->
arg);
854 Assert(owner != newparent);
855 owner->
parent = newparent;
958 bool isCommit = (code == 0);
997 elog(
ERROR,
"buffer %d is not owned by resource owner %s",
998 buffer, owner->
name);
1035 elog(
PANIC,
"buffer IO %d is not owned by resource owner %s",
1036 buffer, owner->
name);
1052 Assert(locallock != NULL);
1078 for (
i = owner->
nlocks - 1;
i >= 0;
i--)
1080 if (locallock == owner->
locks[
i])
1087 elog(
ERROR,
"lock reference %p is not owned by resource owner %s",
1088 locallock, owner->
name);
1122 elog(
ERROR,
"catcache reference %p is not owned by resource owner %s",
1123 tuple, owner->
name);
1157 elog(
ERROR,
"catcache list reference %p is not owned by resource owner %s",
1192 elog(
ERROR,
"relcache reference %s is not owned by resource owner %s",
1202 elog(
WARNING,
"relcache reference leak: relation \"%s\" not closed",
1237 elog(
ERROR,
"plancache reference %p is not owned by resource owner %s",
1281 elog(
ERROR,
"tupdesc reference %p is not owned by resource owner %s",
1282 tupdesc, owner->
name);
1292 "TupleDesc reference leak: TupleDesc %p (%u,%d) still referenced",
1327 elog(
ERROR,
"snapshot reference %p is not owned by resource owner %s",
1328 snapshot, owner->
name);
1337 elog(
WARNING,
"Snapshot reference leak: Snapshot %p still referenced",
1373 elog(
ERROR,
"temporary file %d is not owned by resource owner %s",
1383 elog(
WARNING,
"temporary file leak: File %d still referenced",
1418 elog(
ERROR,
"dynamic shared memory segment %u is not owned by resource owner %s",
1428 elog(
WARNING,
"dynamic shared memory leak: segment %u still referenced",
1463 elog(
ERROR,
"JIT context %p is not owned by resource owner %s",
1498 elog(
ERROR,
"cryptohash context %p is not owned by resource owner %s",
1508 elog(
WARNING,
"cryptohash context reference leak: context %p still referenced",
1543 elog(
ERROR,
"HMAC context %p is not owned by resource owner %s",
1553 elog(
WARNING,
"HMAC context reference leak: context %p still referenced",
Datum idx(PG_FUNCTION_ARGS)
void AbortBufferIO(Buffer buffer)
void ReleaseBuffer(Buffer buffer)
void PrintBufferLeakWarning(Buffer buffer)
void ReleaseCatCacheList(CatCList *list)
void PrintCatCacheLeakWarning(HeapTuple tuple)
void PrintCatCacheListLeakWarning(CatCList *list)
void ReleaseCatCache(HeapTuple tuple)
void pg_cryptohash_free(pg_cryptohash_ctx *ctx)
static void PGresult * res
elog(ERROR, "%s: %s", p2, msg)
dsm_handle dsm_segment_handle(dsm_segment *seg)
void dsm_detach(dsm_segment *seg)
void FileClose(File file)
static Datum hash_any(const unsigned char *k, int keylen)
void pg_hmac_free(pg_hmac_ctx *ctx)
HeapTupleData * HeapTuple
void on_shmem_exit(pg_on_exit_callback function, Datum arg)
void jit_release_context(JitContext *context)
Assert(fmt[strlen(fmt) - 1] !='\n')
void LockReassignCurrentOwner(LOCALLOCK **locallocks, int nlocks)
void LockReleaseCurrentOwner(LOCALLOCK **locallocks, int nlocks)
void pfree(void *pointer)
MemoryContext TopMemoryContext
void * MemoryContextAllocZero(MemoryContext context, Size size)
void * MemoryContextAlloc(MemoryContext context, Size size)
void ReleaseCachedPlan(CachedPlan *plan, ResourceOwner owner)
static uint32 DatumGetUInt32(Datum X)
static Datum PointerGetDatum(const void *X)
static Pointer DatumGetPointer(Datum X)
void ReleasePredicateLocks(bool isCommit, bool isReadOnlySafe)
#define RelationGetRelationName(relation)
void RelationClose(Relation relation)
struct RelationData * Relation
void ResourceOwnerNewParent(ResourceOwner owner, ResourceOwner newparent)
#define DatumGetBuffer(datum)
#define MAX_RESOWNER_LOCKS
void ResourceOwnerForgetBufferIO(ResourceOwner owner, Buffer buffer)
#define RESARRAY_MAX_ITEMS(capacity)
void ResourceOwnerEnlargeJIT(ResourceOwner owner)
void ResourceOwnerRememberLock(ResourceOwner owner, LOCALLOCK *locallock)
void ResourceOwnerEnlargeFiles(ResourceOwner owner)
static void ReleaseAuxProcessResourcesCallback(int code, Datum arg)
void ResourceOwnerRememberCatCacheRef(ResourceOwner owner, HeapTuple tuple)
static void ResourceArrayAdd(ResourceArray *resarr, Datum value)
void ResourceOwnerForgetDSM(ResourceOwner owner, dsm_segment *seg)
static void ResourceArrayFree(ResourceArray *resarr)
void ResourceOwnerForgetFile(ResourceOwner owner, File file)
void ResourceOwnerForgetBuffer(ResourceOwner owner, Buffer buffer)
ResourceOwner TopTransactionResourceOwner
void ResourceOwnerRememberPlanCacheRef(ResourceOwner owner, CachedPlan *plan)
void UnregisterResourceReleaseCallback(ResourceReleaseCallback callback, void *arg)
void ResourceOwnerEnlargeHMAC(ResourceOwner owner)
ResourceOwner ResourceOwnerCreate(ResourceOwner parent, const char *name)
void ReleaseAuxProcessResources(bool isCommit)
ResourceOwner ResourceOwnerGetParent(ResourceOwner owner)
ResourceOwner CurrentResourceOwner
void ResourceOwnerRememberCryptoHash(ResourceOwner owner, Datum handle)
void ResourceOwnerEnlargeRelationRefs(ResourceOwner owner)
void ResourceOwnerRememberDSM(ResourceOwner owner, dsm_segment *seg)
static bool ResourceArrayRemove(ResourceArray *resarr, Datum value)
static void PrintPlanCacheLeakWarning(CachedPlan *plan)
void ResourceOwnerForgetJIT(ResourceOwner owner, Datum handle)
static ResourceReleaseCallbackItem * ResourceRelease_callbacks
static void ResourceArrayEnlarge(ResourceArray *resarr)
void ResourceOwnerForgetTupleDesc(ResourceOwner owner, TupleDesc tupdesc)
void ResourceOwnerEnlargeCatCacheRefs(ResourceOwner owner)
static void PrintSnapshotLeakWarning(Snapshot snapshot)
void CreateAuxProcessResourceOwner(void)
void ResourceOwnerRelease(ResourceOwner owner, ResourceReleasePhase phase, bool isCommit, bool isTopLevel)
void ResourceOwnerRememberFile(ResourceOwner owner, File file)
void ResourceOwnerRememberRelationRef(ResourceOwner owner, Relation rel)
void ResourceOwnerRememberTupleDesc(ResourceOwner owner, TupleDesc tupdesc)
void ResourceOwnerEnlargeTupleDescs(ResourceOwner owner)
static void PrintCryptoHashLeakWarning(Datum handle)
void RegisterResourceReleaseCallback(ResourceReleaseCallback callback, void *arg)
void ResourceOwnerForgetPlanCacheRef(ResourceOwner owner, CachedPlan *plan)
static void PrintTupleDescLeakWarning(TupleDesc tupdesc)
static void ResourceOwnerReleaseInternal(ResourceOwner owner, ResourceReleasePhase phase, bool isCommit, bool isTopLevel)
void ResourceOwnerRememberCatCacheListRef(ResourceOwner owner, CatCList *list)
void ResourceOwnerEnlargeBuffers(ResourceOwner owner)
ResourceOwner AuxProcessResourceOwner
struct ResourceReleaseCallbackItem ResourceReleaseCallbackItem
void ResourceOwnerRememberHMAC(ResourceOwner owner, Datum handle)
#define DatumGetFile(datum)
void ResourceOwnerDelete(ResourceOwner owner)
static void ResourceArrayInit(ResourceArray *resarr, Datum invalidval)
void ResourceOwnerEnlargeCatCacheListRefs(ResourceOwner owner)
void ResourceOwnerReleaseAllPlanCacheRefs(ResourceOwner owner)
void ResourceOwnerRememberBuffer(ResourceOwner owner, Buffer buffer)
ResourceOwner CurTransactionResourceOwner
void ResourceOwnerForgetHMAC(ResourceOwner owner, Datum handle)
static void PrintRelCacheLeakWarning(Relation rel)
void ResourceOwnerRememberBufferIO(ResourceOwner owner, Buffer buffer)
#define BufferGetDatum(buffer)
static void PrintHMACLeakWarning(Datum handle)
void ResourceOwnerEnlargeDSMs(ResourceOwner owner)
#define RESARRAY_INIT_SIZE
struct ResourceArray ResourceArray
void ResourceOwnerRememberSnapshot(ResourceOwner owner, Snapshot snapshot)
void ResourceOwnerForgetSnapshot(ResourceOwner owner, Snapshot snapshot)
void ResourceOwnerForgetRelationRef(ResourceOwner owner, Relation rel)
void ResourceOwnerForgetCatCacheRef(ResourceOwner owner, HeapTuple tuple)
static void PrintDSMLeakWarning(dsm_segment *seg)
static void PrintFileLeakWarning(File file)
void ResourceOwnerEnlargePlanCacheRefs(ResourceOwner owner)
void ResourceOwnerForgetLock(ResourceOwner owner, LOCALLOCK *locallock)
struct ResourceOwnerData ResourceOwnerData
void ResourceOwnerEnlargeCryptoHash(ResourceOwner owner)
void ResourceOwnerForgetCryptoHash(ResourceOwner owner, Datum handle)
static bool ResourceArrayGetAny(ResourceArray *resarr, Datum *value)
void ResourceOwnerForgetCatCacheListRef(ResourceOwner owner, CatCList *list)
#define RESARRAY_IS_ARRAY(resarr)
void ResourceOwnerRememberJIT(ResourceOwner owner, Datum handle)
#define FileGetDatum(file)
void ResourceOwnerEnlargeBufferIOs(ResourceOwner owner)
void ResourceOwnerEnlargeSnapshots(ResourceOwner owner)
@ RESOURCE_RELEASE_BEFORE_LOCKS
@ RESOURCE_RELEASE_AFTER_LOCKS
struct ResourceOwnerData * ResourceOwner
void(* ResourceReleaseCallback)(ResourceReleasePhase phase, bool isCommit, bool isTopLevel, void *arg)
void UnregisterSnapshot(Snapshot snapshot)
struct SnapshotData * Snapshot
void ProcReleaseLocks(bool isCommit)
ResourceArray bufferioarr
LOCALLOCK * locks[MAX_RESOWNER_LOCKS]
ResourceArray catlistrefarr
ResourceArray cryptohasharr
ResourceArray snapshotarr
struct ResourceReleaseCallbackItem * next
ResourceReleaseCallback callback
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
void DecrTupleDescRefCount(TupleDesc tupdesc)
struct TupleDescData * TupleDesc