codekingpro/portable-devtools
114k
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 