lmgr.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /*-------------------------------------------------------------------------
  2. *
  3. * lmgr.h
  4. * POSTGRES lock manager definitions.
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
  8. * Portions Copyright (c) 1994, Regents of the University of California
  9. *
  10. * src/include/storage/lmgr.h
  11. *
  12. *-------------------------------------------------------------------------
  13. */
  14. #ifndef LMGR_H
  15. #define LMGR_H
  16. #include "lib/stringinfo.h"
  17. #include "storage/itemptr.h"
  18. #include "storage/lock.h"
  19. #include "utils/rel.h"
  20. /* XactLockTableWait operations */
  21. typedef enum XLTW_Oper
  22. {
  23. XLTW_None,
  24. XLTW_Update,
  25. XLTW_Delete,
  26. XLTW_Lock,
  27. XLTW_LockUpdated,
  28. XLTW_InsertIndex,
  29. XLTW_InsertIndexUnique,
  30. XLTW_FetchUpdated,
  31. XLTW_RecheckExclusionConstr
  32. } XLTW_Oper;
  33. extern void RelationInitLockInfo(Relation relation);
  34. /* Lock a relation */
  35. extern void LockRelationOid(Oid relid, LOCKMODE lockmode);
  36. extern bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode);
  37. extern void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode);
  38. extern void UnlockRelationOid(Oid relid, LOCKMODE lockmode);
  39. extern void LockRelation(Relation relation, LOCKMODE lockmode);
  40. extern bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode);
  41. extern void UnlockRelation(Relation relation, LOCKMODE lockmode);
  42. extern bool LockHasWaitersRelation(Relation relation, LOCKMODE lockmode);
  43. extern void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
  44. extern void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
  45. /* Lock a relation for extension */
  46. extern void LockRelationForExtension(Relation relation, LOCKMODE lockmode);
  47. extern void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode);
  48. extern bool ConditionalLockRelationForExtension(Relation relation,
  49. LOCKMODE lockmode);
  50. extern int RelationExtensionLockWaiterCount(Relation relation);
  51. /* Lock a page (currently only used within indexes) */
  52. extern void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
  53. extern bool ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
  54. extern void UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
  55. /* Lock a tuple (see heap_lock_tuple before assuming you understand this) */
  56. extern void LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
  57. extern bool ConditionalLockTuple(Relation relation, ItemPointer tid,
  58. LOCKMODE lockmode);
  59. extern void UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
  60. /* Lock an XID (used to wait for a transaction to finish) */
  61. extern void XactLockTableInsert(TransactionId xid);
  62. extern void XactLockTableDelete(TransactionId xid);
  63. extern void XactLockTableWait(TransactionId xid, Relation rel,
  64. ItemPointer ctid, XLTW_Oper oper);
  65. extern bool ConditionalXactLockTableWait(TransactionId xid);
  66. /* Lock VXIDs, specified by conflicting locktags */
  67. extern void WaitForLockers(LOCKTAG heaplocktag, LOCKMODE lockmode);
  68. extern void WaitForLockersMultiple(List *locktags, LOCKMODE lockmode);
  69. /* Lock an XID for tuple insertion (used to wait for an insertion to finish) */
  70. extern uint32 SpeculativeInsertionLockAcquire(TransactionId xid);
  71. extern void SpeculativeInsertionLockRelease(TransactionId xid);
  72. extern void SpeculativeInsertionWait(TransactionId xid, uint32 token);
  73. /* Lock a general object (other than a relation) of the current database */
  74. extern void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
  75. LOCKMODE lockmode);
  76. extern void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
  77. LOCKMODE lockmode);
  78. /* Lock a shared-across-databases object (other than a relation) */
  79. extern void LockSharedObject(Oid classid, Oid objid, uint16 objsubid,
  80. LOCKMODE lockmode);
  81. extern void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid,
  82. LOCKMODE lockmode);
  83. extern void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
  84. LOCKMODE lockmode);
  85. extern void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
  86. LOCKMODE lockmode);
  87. /* Describe a locktag for error messages */
  88. extern void DescribeLockTag(StringInfo buf, const LOCKTAG *tag);
  89. extern const char *GetLockNameFromTagType(uint16 locktag_type);
  90. #endif /* LMGR_H */