gooderp18绿色标准版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 line
2.7KB

  1. /*-------------------------------------------------------------------------
  2. *
  3. * resowner.h
  4. * POSTGRES resource owner definitions.
  5. *
  6. * Query-lifespan resources are tracked by associating them with
  7. * ResourceOwner objects. This provides a simple mechanism for ensuring
  8. * that such resources are freed at the right time.
  9. * See utils/resowner/README for more info.
  10. *
  11. *
  12. * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
  13. * Portions Copyright (c) 1994, Regents of the University of California
  14. *
  15. * src/include/utils/resowner.h
  16. *
  17. *-------------------------------------------------------------------------
  18. */
  19. #ifndef RESOWNER_H
  20. #define RESOWNER_H
  21. /*
  22. * ResourceOwner objects are an opaque data structure known only within
  23. * resowner.c.
  24. */
  25. typedef struct ResourceOwnerData *ResourceOwner;
  26. /*
  27. * Globally known ResourceOwners
  28. */
  29. extern PGDLLIMPORT ResourceOwner CurrentResourceOwner;
  30. extern PGDLLIMPORT ResourceOwner CurTransactionResourceOwner;
  31. extern PGDLLIMPORT ResourceOwner TopTransactionResourceOwner;
  32. extern PGDLLIMPORT ResourceOwner AuxProcessResourceOwner;
  33. /*
  34. * Resource releasing is done in three phases: pre-locks, locks, and
  35. * post-locks. The pre-lock phase must release any resources that are
  36. * visible to other backends (such as pinned buffers); this ensures that
  37. * when we release a lock that another backend may be waiting on, it will
  38. * see us as being fully out of our transaction. The post-lock phase
  39. * should be used for backend-internal cleanup.
  40. */
  41. typedef enum
  42. {
  43. RESOURCE_RELEASE_BEFORE_LOCKS,
  44. RESOURCE_RELEASE_LOCKS,
  45. RESOURCE_RELEASE_AFTER_LOCKS
  46. } ResourceReleasePhase;
  47. /*
  48. * Dynamically loaded modules can get control during ResourceOwnerRelease
  49. * by providing a callback of this form.
  50. */
  51. typedef void (*ResourceReleaseCallback) (ResourceReleasePhase phase,
  52. bool isCommit,
  53. bool isTopLevel,
  54. void *arg);
  55. /*
  56. * Functions in resowner.c
  57. */
  58. /* generic routines */
  59. extern ResourceOwner ResourceOwnerCreate(ResourceOwner parent,
  60. const char *name);
  61. extern void ResourceOwnerRelease(ResourceOwner owner,
  62. ResourceReleasePhase phase,
  63. bool isCommit,
  64. bool isTopLevel);
  65. extern void ResourceOwnerDelete(ResourceOwner owner);
  66. extern ResourceOwner ResourceOwnerGetParent(ResourceOwner owner);
  67. extern void ResourceOwnerNewParent(ResourceOwner owner,
  68. ResourceOwner newparent);
  69. extern void RegisterResourceReleaseCallback(ResourceReleaseCallback callback,
  70. void *arg);
  71. extern void UnregisterResourceReleaseCallback(ResourceReleaseCallback callback,
  72. void *arg);
  73. extern void CreateAuxProcessResourceOwner(void);
  74. extern void ReleaseAuxProcessResources(bool isCommit);
  75. #endif /* RESOWNER_H */
上海开阖软件有限公司 沪ICP备12045867号-1