Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
resowner.h87 linesDownload Raw Back to utils
1/*-------------------------------------------------------------------------2 *3 * resowner.h4 *	  POSTGRES resource owner definitions.5 *6 * Query-lifespan resources are tracked by associating them with7 * ResourceOwner objects.  This provides a simple mechanism for ensuring8 * that such resources are freed at the right time.9 * See utils/resowner/README for more info.10 *11 *12 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group13 * Portions Copyright (c) 1994, Regents of the University of California14 *15 * src/include/utils/resowner.h16 *17 *-------------------------------------------------------------------------18 */19#ifndef RESOWNER_H20#define RESOWNER_H21 22 23/*24 * ResourceOwner objects are an opaque data structure known only within25 * resowner.c.26 */27typedef struct ResourceOwnerData *ResourceOwner;28 29 30/*31 * Globally known ResourceOwners32 */33extern PGDLLIMPORT ResourceOwner CurrentResourceOwner;34extern PGDLLIMPORT ResourceOwner CurTransactionResourceOwner;35extern PGDLLIMPORT ResourceOwner TopTransactionResourceOwner;36extern PGDLLIMPORT ResourceOwner AuxProcessResourceOwner;37 38/*39 * Resource releasing is done in three phases: pre-locks, locks, and40 * post-locks.  The pre-lock phase must release any resources that are41 * visible to other backends (such as pinned buffers); this ensures that42 * when we release a lock that another backend may be waiting on, it will43 * see us as being fully out of our transaction.  The post-lock phase44 * should be used for backend-internal cleanup.45 */46typedef enum47{48	RESOURCE_RELEASE_BEFORE_LOCKS,49	RESOURCE_RELEASE_LOCKS,50	RESOURCE_RELEASE_AFTER_LOCKS51} ResourceReleasePhase;52 53/*54 *	Dynamically loaded modules can get control during ResourceOwnerRelease55 *	by providing a callback of this form.56 */57typedef void (*ResourceReleaseCallback) (ResourceReleasePhase phase,58										 bool isCommit,59										 bool isTopLevel,60										 void *arg);61 62 63/*64 * Functions in resowner.c65 */66 67/* generic routines */68extern ResourceOwner ResourceOwnerCreate(ResourceOwner parent,69										 const char *name);70extern void ResourceOwnerRelease(ResourceOwner owner,71								 ResourceReleasePhase phase,72								 bool isCommit,73								 bool isTopLevel);74extern void ResourceOwnerReleaseAllPlanCacheRefs(ResourceOwner owner);75extern void ResourceOwnerDelete(ResourceOwner owner);76extern ResourceOwner ResourceOwnerGetParent(ResourceOwner owner);77extern void ResourceOwnerNewParent(ResourceOwner owner,78								   ResourceOwner newparent);79extern void RegisterResourceReleaseCallback(ResourceReleaseCallback callback,80											void *arg);81extern void UnregisterResourceReleaseCallback(ResourceReleaseCallback callback,82											  void *arg);83extern void CreateAuxProcessResourceOwner(void);84extern void ReleaseAuxProcessResources(bool isCommit);85 86#endif							/* RESOWNER_H */87 
codekingpro/portable-devtools · Team Ai