]> granicus.if.org Git - postgresql/blob - src/include/storage/lmgr.h
pgindent run for 9.4
[postgresql] / src / include / storage / lmgr.h
1 /*-------------------------------------------------------------------------
2  *
3  * lmgr.h
4  *        POSTGRES lock manager definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2014, 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
17 #include "lib/stringinfo.h"
18 #include "storage/itemptr.h"
19 #include "storage/lock.h"
20 #include "utils/rel.h"
21
22
23 /* XactLockTableWait operations */
24 typedef enum XLTW_Oper
25 {
26         XLTW_None,
27         XLTW_Update,
28         XLTW_Delete,
29         XLTW_Lock,
30         XLTW_LockUpdated,
31         XLTW_InsertIndex,
32         XLTW_InsertIndexUnique,
33         XLTW_FetchUpdated,
34         XLTW_RecheckExclusionConstr
35 } XLTW_Oper;
36
37 extern void RelationInitLockInfo(Relation relation);
38
39 /* Lock a relation */
40 extern void LockRelationOid(Oid relid, LOCKMODE lockmode);
41 extern bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode);
42 extern void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode);
43 extern void UnlockRelationOid(Oid relid, LOCKMODE lockmode);
44
45 extern void LockRelation(Relation relation, LOCKMODE lockmode);
46 extern bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode);
47 extern void UnlockRelation(Relation relation, LOCKMODE lockmode);
48 extern bool LockHasWaitersRelation(Relation relation, LOCKMODE lockmode);
49
50 extern void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
51 extern void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
52
53 /* Lock a relation for extension */
54 extern void LockRelationForExtension(Relation relation, LOCKMODE lockmode);
55 extern void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode);
56
57 /* Lock a page (currently only used within indexes) */
58 extern void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
59 extern bool ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
60 extern void UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
61
62 /* Lock a tuple (see heap_lock_tuple before assuming you understand this) */
63 extern void LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
64 extern bool ConditionalLockTuple(Relation relation, ItemPointer tid,
65                                          LOCKMODE lockmode);
66 extern void UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
67
68 /* Lock an XID (used to wait for a transaction to finish) */
69 extern void XactLockTableInsert(TransactionId xid);
70 extern void XactLockTableDelete(TransactionId xid);
71 extern void XactLockTableWait(TransactionId xid, Relation rel,
72                                   ItemPointer ctid, XLTW_Oper oper);
73 extern bool ConditionalXactLockTableWait(TransactionId xid);
74
75 /* Lock VXIDs, specified by conflicting locktags */
76 extern void WaitForLockers(LOCKTAG heaplocktag, LOCKMODE lockmode);
77 extern void WaitForLockersMultiple(List *locktags, LOCKMODE lockmode);
78
79 /* Lock a general object (other than a relation) of the current database */
80 extern void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
81                                    LOCKMODE lockmode);
82 extern void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
83                                          LOCKMODE lockmode);
84
85 /* Lock a shared-across-databases object (other than a relation) */
86 extern void LockSharedObject(Oid classid, Oid objid, uint16 objsubid,
87                                  LOCKMODE lockmode);
88 extern void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid,
89                                    LOCKMODE lockmode);
90
91 extern void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
92                                                    LOCKMODE lockmode);
93 extern void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
94                                                          LOCKMODE lockmode);
95
96 /* Describe a locktag for error messages */
97 extern void DescribeLockTag(StringInfo buf, const LOCKTAG *tag);
98
99 #endif   /* LMGR_H */