Remove the placeholder LWLockId in place of the removed FreeSpaceLock.
[PostgreSQL.git] / src / include / storage / lwlock.h
blobe389c61c1d06fe002ef394c5e14094e6988348d4
1 /*-------------------------------------------------------------------------
3 * lwlock.h
4 * Lightweight lock manager
7 * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
10 * $PostgreSQL$
12 *-------------------------------------------------------------------------
14 #ifndef LWLOCK_H
15 #define LWLOCK_H
18 * It's a bit odd to declare NUM_BUFFER_PARTITIONS and NUM_LOCK_PARTITIONS
19 * here, but we need them to set up enum LWLockId correctly, and having
20 * this file include lock.h or bufmgr.h would be backwards.
23 /* Number of partitions of the shared buffer mapping hashtable */
24 #define NUM_BUFFER_PARTITIONS 16
26 /* Number of partitions the shared lock tables are divided into */
27 #define LOG2_NUM_LOCK_PARTITIONS 4
28 #define NUM_LOCK_PARTITIONS (1 << LOG2_NUM_LOCK_PARTITIONS)
31 * We have a number of predefined LWLocks, plus a bunch of LWLocks that are
32 * dynamically assigned (e.g., for shared buffers). The LWLock structures
33 * live in shared memory (since they contain shared data) and are identified
34 * by values of this enumerated type. We abuse the notion of an enum somewhat
35 * by allowing values not listed in the enum declaration to be assigned.
36 * The extra value MaxDynamicLWLock is there to keep the compiler from
37 * deciding that the enum can be represented as char or short ...
39 * If you remove a lock, please replace it with a placeholder. This retains
40 * the lock numbering, which is helpful for DTrace and other external
41 * debugging scripts.
43 typedef enum LWLockId
45 BufFreelistLock,
46 ShmemIndexLock,
47 OidGenLock,
48 XidGenLock,
49 ProcArrayLock,
50 SInvalReadLock,
51 SInvalWriteLock,
52 WALInsertLock,
53 WALWriteLock,
54 ControlFileLock,
55 CheckpointLock,
56 CLogControlLock,
57 SubtransControlLock,
58 MultiXactGenLock,
59 MultiXactOffsetControlLock,
60 MultiXactMemberControlLock,
61 RelCacheInitLock,
62 BgWriterCommLock,
63 TwoPhaseStateLock,
64 TablespaceCreateLock,
65 BtreeVacuumLock,
66 AddinShmemInitLock,
67 AutovacuumLock,
68 AutovacuumScheduleLock,
69 SyncScanLock,
70 /* Individual lock IDs end here */
71 FirstBufMappingLock,
72 FirstLockMgrLock = FirstBufMappingLock + NUM_BUFFER_PARTITIONS,
74 /* must be last except for MaxDynamicLWLock: */
75 NumFixedLWLocks = FirstLockMgrLock + NUM_LOCK_PARTITIONS,
77 MaxDynamicLWLock = 1000000000
78 } LWLockId;
81 typedef enum LWLockMode
83 LW_EXCLUSIVE,
84 LW_SHARED
85 } LWLockMode;
88 #ifdef LOCK_DEBUG
89 extern bool Trace_lwlocks;
90 #endif
92 extern LWLockId LWLockAssign(void);
93 extern void LWLockAcquire(LWLockId lockid, LWLockMode mode);
94 extern bool LWLockConditionalAcquire(LWLockId lockid, LWLockMode mode);
95 extern void LWLockRelease(LWLockId lockid);
96 extern void LWLockReleaseAll(void);
97 extern bool LWLockHeldByMe(LWLockId lockid);
99 extern int NumLWLocks(void);
100 extern Size LWLockShmemSize(void);
101 extern void CreateLWLocks(void);
103 extern void RequestAddinLWLocks(int n);
105 #endif /* LWLOCK_H */