diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/utils/hash/hashfn.c | 1 | ||||
-rw-r--r-- | src/include/access/genam.h | 2 | ||||
-rw-r--r-- | src/include/access/hash.h | 2 | ||||
-rw-r--r-- | src/include/access/tuptoaster.h | 2 | ||||
-rw-r--r-- | src/include/catalog/objectaddress.h | 2 | ||||
-rw-r--r-- | src/include/port/atomics.h | 4 | ||||
-rw-r--r-- | src/include/storage/lock.h | 43 | ||||
-rw-r--r-- | src/include/storage/lockdefs.h | 56 | ||||
-rw-r--r-- | src/include/storage/lwlock.h | 4 | ||||
-rw-r--r-- | src/include/storage/procarray.h | 1 | ||||
-rw-r--r-- | src/include/storage/s_lock.h | 4 | ||||
-rw-r--r-- | src/include/storage/standby.h | 2 |
12 files changed, 80 insertions, 43 deletions
diff --git a/src/backend/utils/hash/hashfn.c b/src/backend/utils/hash/hashfn.c index 260d8806dbb..bdd438d4cab 100644 --- a/src/backend/utils/hash/hashfn.c +++ b/src/backend/utils/hash/hashfn.c @@ -22,6 +22,7 @@ #include "postgres.h" #include "access/hash.h" +#include "utils/hsearch.h" /* diff --git a/src/include/access/genam.h b/src/include/access/genam.h index d86590ac111..d9d05a08ffe 100644 --- a/src/include/access/genam.h +++ b/src/include/access/genam.h @@ -17,7 +17,7 @@ #include "access/sdir.h" #include "access/skey.h" #include "nodes/tidbitmap.h" -#include "storage/lock.h" +#include "storage/lockdefs.h" #include "utils/relcache.h" #include "utils/snapshot.h" diff --git a/src/include/access/hash.h b/src/include/access/hash.h index 93cc8afcebc..97cb859fa50 100644 --- a/src/include/access/hash.h +++ b/src/include/access/hash.h @@ -24,7 +24,7 @@ #include "fmgr.h" #include "lib/stringinfo.h" #include "storage/bufmgr.h" -#include "storage/lock.h" +#include "storage/lockdefs.h" #include "utils/relcache.h" /* diff --git a/src/include/access/tuptoaster.h b/src/include/access/tuptoaster.h index 7d185357714..77f637e90d7 100644 --- a/src/include/access/tuptoaster.h +++ b/src/include/access/tuptoaster.h @@ -14,8 +14,8 @@ #define TUPTOASTER_H #include "access/htup_details.h" +#include "storage/lockdefs.h" #include "utils/relcache.h" -#include "storage/lock.h" /* * This enables de-toasting of index entries. Needed until VACUUM is diff --git a/src/include/catalog/objectaddress.h b/src/include/catalog/objectaddress.h index 37808c03c6e..0fc16ed7173 100644 --- a/src/include/catalog/objectaddress.h +++ b/src/include/catalog/objectaddress.h @@ -14,7 +14,7 @@ #define OBJECTADDRESS_H #include "nodes/pg_list.h" -#include "storage/lock.h" +#include "storage/lockdefs.h" #include "utils/acl.h" #include "utils/relcache.h" diff --git a/src/include/port/atomics.h b/src/include/port/atomics.h index bb879450889..65cfa3f8249 100644 --- a/src/include/port/atomics.h +++ b/src/include/port/atomics.h @@ -37,6 +37,10 @@ #ifndef ATOMICS_H #define ATOMICS_H +#ifdef FRONTEND +#error "atomics.h may not be included from frontend code" +#endif + #define INSIDE_ATOMICS_H #include <limits.h> diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h index 96fe3a66ab0..a9cd08c5276 100644 --- a/src/include/storage/lock.h +++ b/src/include/storage/lock.h @@ -14,6 +14,11 @@ #ifndef LOCK_H_ #define LOCK_H_ +#ifdef FRONTEND +#error "lock.h may not be included from frontend code" +#endif + +#include "storage/lockdefs.h" #include "storage/backendid.h" #include "storage/lwlock.h" #include "storage/shmem.h" @@ -77,15 +82,6 @@ typedef struct ((vxid).backendId = (proc).backendId, \ (vxid).localTransactionId = (proc).lxid) - -/* - * LOCKMODE is an integer (1..N) indicating a lock type. LOCKMASK is a bit - * mask indicating a set of held or requested lock types (the bit 1<<mode - * corresponds to a particular lock mode). - */ -typedef int LOCKMASK; -typedef int LOCKMODE; - /* MAX_LOCKMODES cannot be larger than the # of bits in LOCKMASK */ #define MAX_LOCKMODES 10 @@ -134,28 +130,6 @@ typedef uint16 LOCKMETHODID; #define USER_LOCKMETHOD 2 /* - * These are the valid values of type LOCKMODE for all the standard lock - * methods (both DEFAULT and USER). - */ - -/* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */ -#define NoLock 0 - -#define AccessShareLock 1 /* SELECT */ -#define RowShareLock 2 /* SELECT FOR UPDATE/FOR SHARE */ -#define RowExclusiveLock 3 /* INSERT, UPDATE, DELETE */ -#define ShareUpdateExclusiveLock 4 /* VACUUM (non-FULL),ANALYZE, CREATE - * INDEX CONCURRENTLY */ -#define ShareLock 5 /* CREATE INDEX (WITHOUT CONCURRENTLY) */ -#define ShareRowExclusiveLock 6 /* like EXCLUSIVE MODE, but allows ROW - * SHARE */ -#define ExclusiveLock 7 /* blocks ROW SHARE/SELECT...FOR - * UPDATE */ -#define AccessExclusiveLock 8 /* ALTER TABLE, DROP TABLE, VACUUM - * FULL, and unqualified LOCK TABLE */ - - -/* * LOCKTAG is the key information needed to look up a LOCK item in the * lock hashtable. A LOCKTAG value uniquely identifies a lockable object. * @@ -536,13 +510,6 @@ extern void RemoveFromWaitQueue(PGPROC *proc, uint32 hashcode); extern Size LockShmemSize(void); extern LockData *GetLockStatusData(void); -typedef struct xl_standby_lock -{ - TransactionId xid; /* xid of holder of AccessExclusiveLock */ - Oid dbOid; - Oid relOid; -} xl_standby_lock; - extern xl_standby_lock *GetRunningTransactionLocks(int *nlocks); extern const char *GetLockmodeName(LOCKMETHODID lockmethodid, LOCKMODE mode); diff --git a/src/include/storage/lockdefs.h b/src/include/storage/lockdefs.h new file mode 100644 index 00000000000..bfbcdbaf119 --- /dev/null +++ b/src/include/storage/lockdefs.h @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------------- + * + * lockdefs.h + * Frontend exposed parts of postgres' low level lock mechanism + * + * The split between lockdefs.h and lock.h is not very principled. This file + * contains definition that have to (indirectly) be available when included by + * FRONTEND code. + * + * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/storage/lockdefs.h + * + *------------------------------------------------------------------------- + */ +#ifndef LOCKDEFS_H_ +#define LOCKDEFS_H_ + +/* + * LOCKMODE is an integer (1..N) indicating a lock type. LOCKMASK is a bit + * mask indicating a set of held or requested lock types (the bit 1<<mode + * corresponds to a particular lock mode). + */ +typedef int LOCKMASK; +typedef int LOCKMODE; + +/* + * These are the valid values of type LOCKMODE for all the standard lock + * methods (both DEFAULT and USER). + */ + +/* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */ +#define NoLock 0 + +#define AccessShareLock 1 /* SELECT */ +#define RowShareLock 2 /* SELECT FOR UPDATE/FOR SHARE */ +#define RowExclusiveLock 3 /* INSERT, UPDATE, DELETE */ +#define ShareUpdateExclusiveLock 4 /* VACUUM (non-FULL),ANALYZE, CREATE + * INDEX CONCURRENTLY */ +#define ShareLock 5 /* CREATE INDEX (WITHOUT CONCURRENTLY) */ +#define ShareRowExclusiveLock 6 /* like EXCLUSIVE MODE, but allows ROW + * SHARE */ +#define ExclusiveLock 7 /* blocks ROW SHARE/SELECT...FOR + * UPDATE */ +#define AccessExclusiveLock 8 /* ALTER TABLE, DROP TABLE, VACUUM + * FULL, and unqualified LOCK TABLE */ + +typedef struct xl_standby_lock +{ + TransactionId xid; /* xid of holder of AccessExclusiveLock */ + Oid dbOid; + Oid relOid; +} xl_standby_lock; + +#endif /* LOCKDEF_H_ */ diff --git a/src/include/storage/lwlock.h b/src/include/storage/lwlock.h index cbd63184b9b..f2ff6a06f01 100644 --- a/src/include/storage/lwlock.h +++ b/src/include/storage/lwlock.h @@ -14,6 +14,10 @@ #ifndef LWLOCK_H #define LWLOCK_H +#ifdef FRONTEND +#error "lwlock.h may not be included from frontend code" +#endif + #include "lib/ilist.h" #include "storage/s_lock.h" #include "port/atomics.h" diff --git a/src/include/storage/procarray.h b/src/include/storage/procarray.h index a9b40ed944f..834f99b9918 100644 --- a/src/include/storage/procarray.h +++ b/src/include/storage/procarray.h @@ -14,6 +14,7 @@ #ifndef PROCARRAY_H #define PROCARRAY_H +#include "storage/lock.h" #include "storage/standby.h" #include "utils/relcache.h" #include "utils/snapshot.h" diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h index 30f28b088ab..c461fda251b 100644 --- a/src/include/storage/s_lock.h +++ b/src/include/storage/s_lock.h @@ -96,6 +96,10 @@ #ifndef S_LOCK_H #define S_LOCK_H +#ifdef FRONTEND +#error "s_lock.h may not be included from frontend code" +#endif + #ifdef HAVE_SPINLOCKS /* skip spinlocks if requested */ #if defined(__GNUC__) || defined(__INTEL_COMPILER) diff --git a/src/include/storage/standby.h b/src/include/storage/standby.h index 7626c4c4f4b..40b329b2a3c 100644 --- a/src/include/storage/standby.h +++ b/src/include/storage/standby.h @@ -16,7 +16,7 @@ #include "access/xlogreader.h" #include "lib/stringinfo.h" -#include "storage/lock.h" +#include "storage/lockdefs.h" #include "storage/procsignal.h" #include "storage/relfilenode.h" |