📄 resowner.h
字号:
/*------------------------------------------------------------------------- * * resowner.h * POSTGRES resource owner definitions. * * Query-lifespan resources are tracked by associating them with * ResourceOwner objects. This provides a simple mechanism for ensuring * that such resources are freed at the right time. * See utils/resowner/README for more info. * * * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $PostgreSQL: pgsql/src/include/utils/resowner.h,v 1.5 2004/12/31 22:03:46 pgsql Exp $ * *------------------------------------------------------------------------- */#ifndef RESOWNER_H#define RESOWNER_H#include "storage/buf.h"#include "utils/catcache.h"#include "utils/rel.h"/* * ResourceOwner objects are an opaque data structure known only within * resowner.c. */typedef struct ResourceOwnerData *ResourceOwner;/* * Globally known ResourceOwners */extern DLLIMPORT ResourceOwner CurrentResourceOwner;extern DLLIMPORT ResourceOwner CurTransactionResourceOwner;extern DLLIMPORT ResourceOwner TopTransactionResourceOwner;/* * Resource releasing is done in three phases: pre-locks, locks, and * post-locks. The pre-lock phase must release any resources that are * visible to other backends (such as pinned buffers); this ensures that * when we release a lock that another backend may be waiting on, it will * see us as being fully out of our transaction. The post-lock phase * should be used for backend-internal cleanup. */typedef enum{ RESOURCE_RELEASE_BEFORE_LOCKS, RESOURCE_RELEASE_LOCKS, RESOURCE_RELEASE_AFTER_LOCKS} ResourceReleasePhase;/* * Dynamically loaded modules can get control during ResourceOwnerRelease * by providing a callback of this form. */typedef void (*ResourceReleaseCallback) (ResourceReleasePhase phase, bool isCommit, bool isTopLevel, void *arg);/* * Functions in resowner.c *//* generic routines */extern ResourceOwner ResourceOwnerCreate(ResourceOwner parent, const char *name);extern void ResourceOwnerRelease(ResourceOwner owner, ResourceReleasePhase phase, bool isCommit, bool isTopLevel);extern void ResourceOwnerDelete(ResourceOwner owner);extern ResourceOwner ResourceOwnerGetParent(ResourceOwner owner);extern void ResourceOwnerNewParent(ResourceOwner owner, ResourceOwner newparent);extern void RegisterResourceReleaseCallback(ResourceReleaseCallback callback, void *arg);extern void UnregisterResourceReleaseCallback(ResourceReleaseCallback callback, void *arg);/* support for buffer refcount management */extern void ResourceOwnerEnlargeBuffers(ResourceOwner owner);extern void ResourceOwnerRememberBuffer(ResourceOwner owner, Buffer buffer);extern void ResourceOwnerForgetBuffer(ResourceOwner owner, Buffer buffer);/* support for catcache refcount management */extern void ResourceOwnerEnlargeCatCacheRefs(ResourceOwner owner);extern void ResourceOwnerRememberCatCacheRef(ResourceOwner owner, HeapTuple tuple);extern void ResourceOwnerForgetCatCacheRef(ResourceOwner owner, HeapTuple tuple);extern void ResourceOwnerEnlargeCatCacheListRefs(ResourceOwner owner);extern void ResourceOwnerRememberCatCacheListRef(ResourceOwner owner, CatCList *list);extern void ResourceOwnerForgetCatCacheListRef(ResourceOwner owner, CatCList *list);/* support for relcache refcount management */extern void ResourceOwnerEnlargeRelationRefs(ResourceOwner owner);extern void ResourceOwnerRememberRelationRef(ResourceOwner owner, Relation rel);extern void ResourceOwnerForgetRelationRef(ResourceOwner owner, Relation rel);#endif /* RESOWNER_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -