*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: lock.h,v 1.14 1998/06/28 21:17:35 momjian Exp $
+ * $Id: lock.h,v 1.15 1998/06/30 02:33:33 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#define NLOCKS_PER_XACT 40
#define NLOCKENTS NLOCKS_PER_XACT*NBACKENDS
-typedef int LOCK_TYPE;
-typedef int LOCKTYPE;
-typedef int LockTableId;
+typedef int LOCKMODE;
+typedef int LOCKMETHOD;
-/* MAX_LOCKTYPES cannot be larger than the bits in MASK */
-#define MAX_LOCKTYPES 6
+/* MAX_LOCKMODES cannot be larger than the bits in MASK */
+#define MAX_LOCKMODES 6
/*
- * MAX_TABLES corresponds to the number of spin locks allocated in
+ * MAX_LOCK_METHODS corresponds to the number of spin locks allocated in
* CreateSpinLocks() or the number of shared memory locations allocated
* for lock table spin locks in the case of machines with TAS instructions.
*/
-#define MAX_TABLES 2
+#define MAX_LOCK_METHODS 2
#define INVALID_TABLEID 0
/*typedef struct LOCK LOCK; */
-typedef struct ltag
+typedef struct LTAG
{
Oid relId;
Oid dbId;
/* This is the control structure for a lock table. It
* lives in shared memory:
*
- * tableID -- the handle used by the lock table's clients to
- * refer to the table.
+ * lockmethod -- the handle used by the lock table's clients to
+ * refer to the type of lock table being used.
*
- * nLockTypes -- number of lock types (READ,WRITE,etc) that
+ * numLockModes -- number of lock types (READ,WRITE,etc) that
* are defined on this lock table
*
* conflictTab -- this is an array of bitmasks showing lock
* type conflicts. conflictTab[i] is a mask with the j-th bit
* turned on if lock types i and j conflict.
*
- * prio -- each locktype has a priority, so, for example, waiting
+ * prio -- each lockmode has a priority, so, for example, waiting
* writers can be given priority over readers (to avoid
* starvation).
*
* masterlock -- synchronizes access to the table
*
*/
-typedef struct lockctl
+typedef struct LOCKMETHODCTL
{
- LockTableId tableId;
- int nLockTypes;
- int conflictTab[MAX_LOCKTYPES];
- int prio[MAX_LOCKTYPES];
+ LOCKMETHOD lockmethod;
+ int numLockModes;
+ int conflictTab[MAX_LOCKMODES];
+ int prio[MAX_LOCKMODES];
SPINLOCK masterLock;
-} LOCKCTL;
+} LOCKMETHODCTL;
/*
* lockHash -- hash table on lock Ids,
* multiple processes are holding the lock
* ctl - control structure described above.
*/
-typedef struct ltable
+typedef struct LOCKMETHODTABLE
{
HTAB *lockHash;
HTAB *xidHash;
- LOCKCTL *ctl;
-} LOCKTAB;
+ LOCKMETHODCTL *ctl;
+} LOCKMETHODTABLE;
/* -----------------------
* A transaction never conflicts with its own locks. Hence, if
XIDTAG tag;
/* data */
- int holders[MAX_LOCKTYPES];
+ int holders[MAX_LOCKMODES];
int nHolding;
SHM_QUEUE queue;
} XIDLookupEnt;
#define XID_TAGSIZE (sizeof(XIDTAG))
/* originally in procq.h */
-typedef struct procQueue
+typedef struct PROC_QUEUE
{
SHM_QUEUE links;
int size;
* lock.
* nHolding -- total locks of all types.
*/
-typedef struct Lock
+typedef struct LOCK
{
/* hash key */
LOCKTAG tag;
/* data */
int mask;
PROC_QUEUE waitProcs;
- int holders[MAX_LOCKTYPES];
+ int holders[MAX_LOCKMODES];
int nHolding;
- int activeHolders[MAX_LOCKTYPES];
+ int activeHolders[MAX_LOCKMODES];
int nActive;
} LOCK;
#define LockGetLock_nHolders(l) l->nHolders
-#define LockDecrWaitHolders(lock, locktype) \
+#define LockDecrWaitHolders(lock, lockmode) \
( \
lock->nHolding--, \
- lock->holders[locktype]-- \
+ lock->holders[lockmode]-- \
)
#define LockLockTable() SpinAcquire(LockMgrLock);
*/
extern void InitLocks(void);
extern void LockDisable(int status);
-extern LockTableId
-LockTableInit(char *tabName, MASK *conflictsP, int *prioP,
- int ntypes);
-extern bool LockAcquire(LockTableId tableId, LOCKTAG *lockName, LOCKTYPE locktype);
+extern LOCKMETHOD
+LockMethodTableInit(char *tabName, MASK *conflictsP, int *prioP,
+ int numModes);
+extern bool LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag, LOCKMODE lockmode);
extern int
-LockResolveConflicts(LOCKTAB *ltable, LOCK *lock, LOCKTYPE locktype,
+LockResolveConflicts(LOCKMETHOD lockmethod, LOCK *lock, LOCKMODE lockmode,
TransactionId xid);
-extern bool LockRelease(LockTableId tableId, LOCKTAG *lockName, LOCKTYPE locktype);
-extern void GrantLock(LOCK *lock, LOCKTYPE locktype);
-extern bool LockReleaseAll(LockTableId tableId, SHM_QUEUE *lockQueue);
+extern bool LockRelease(LOCKMETHOD lockmethod, LOCKTAG *locktag, LOCKMODE lockmode);
+extern void GrantLock(LOCK *lock, LOCKMODE lockmode);
+extern bool LockReleaseAll(LOCKMETHOD lockmethod, SHM_QUEUE *lockQueue);
extern int LockShmemSize(void);
extern bool LockingDisabled(void);
extern bool DeadLockCheck(SHM_QUEUE *lockQueue, LOCK *findlock, bool skip_check);