summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/hash/hashfn.c1
-rw-r--r--src/include/access/genam.h2
-rw-r--r--src/include/access/hash.h2
-rw-r--r--src/include/access/tuptoaster.h2
-rw-r--r--src/include/catalog/objectaddress.h2
-rw-r--r--src/include/port/atomics.h4
-rw-r--r--src/include/storage/lock.h43
-rw-r--r--src/include/storage/lockdefs.h56
-rw-r--r--src/include/storage/lwlock.h4
-rw-r--r--src/include/storage/procarray.h1
-rw-r--r--src/include/storage/s_lock.h4
-rw-r--r--src/include/storage/standby.h2
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"