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
231 newcap *
sizeof(
Datum));
232 for (
i = 0;
i < newcap;
i++)
241 if (olditemsarr != NULL)
250 for (
i = 0;
i < oldcap;
i++)
318 if (lastidx < resarr->nitems &&
343 if (lastidx < resarr->capacity &&
624 locks = owner->
locks;
705 item->
callback(phase, isCommit, isTopLevel, item->
arg);
827 Assert(owner != newparent);
828 owner->
parent = newparent;
931 bool isCommit = (code == 0);
970 elog(
ERROR,
"buffer %d is not owned by resource owner %s",
971 buffer, owner->
name);
987 Assert(locallock != NULL);
1013 for (
i = owner->
nlocks - 1;
i >= 0;
i--)
1015 if (locallock == owner->
locks[
i])
1022 elog(
ERROR,
"lock reference %p is not owned by resource owner %s",
1023 locallock, owner->
name);
1057 elog(
ERROR,
"catcache reference %p is not owned by resource owner %s",
1058 tuple, owner->
name);
1092 elog(
ERROR,
"catcache list reference %p is not owned by resource owner %s",
1127 elog(
ERROR,
"relcache reference %s is not owned by resource owner %s",
1137 elog(
WARNING,
"relcache reference leak: relation \"%s\" not closed",
1172 elog(
ERROR,
"plancache reference %p is not owned by resource owner %s",
1182 elog(
WARNING,
"plancache reference leak: plan %p not closed", plan);
1216 elog(
ERROR,
"tupdesc reference %p is not owned by resource owner %s",
1217 tupdesc, owner->
name);
1227 "TupleDesc reference leak: TupleDesc %p (%u,%d) still referenced",
1262 elog(
ERROR,
"snapshot reference %p is not owned by resource owner %s",
1263 snapshot, owner->
name);
1272 elog(
WARNING,
"Snapshot reference leak: Snapshot %p still referenced",
1308 elog(
ERROR,
"temporary file %d is not owned by resource owner %s",
1318 elog(
WARNING,
"temporary file leak: File %d still referenced",
1353 elog(
ERROR,
"dynamic shared memory segment %u is not owned by resource owner %s",
1363 elog(
WARNING,
"dynamic shared memory leak: segment %u still referenced",
1398 elog(
ERROR,
"JIT context %p is not owned by resource owner %s",
1433 elog(
ERROR,
"cryptohash context %p is not owned by resource owner %s",
1443 elog(
WARNING,
"cryptohash context reference leak: context %p still referenced",
1478 elog(
ERROR,
"HMAC context %p is not owned by resource owner %s",
1488 elog(
WARNING,
"HMAC context reference leak: context %p still referenced",
Datum idx(PG_FUNCTION_ARGS)
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
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)
#define DatumGetPointer(X)
#define PointerGetDatum(X)
#define DatumGetUInt32(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
#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)
#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 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)
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