More comment improvements.
authorBruce Momjian
Thu, 22 Feb 2001 23:02:33 +0000 (23:02 +0000)
committerBruce Momjian
Thu, 22 Feb 2001 23:02:33 +0000 (23:02 +0000)
src/backend/storage/lmgr/lock.c
src/include/access/nbtree.h
src/include/storage/lmgr.h
src/include/storage/lock.h

index 08e023718ebc766bd11495bd98ea7c09bdb79454..e7484331f9ab39eb973de0481662ff1892362c04 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.81 2001/01/25 03:31:16 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.82 2001/02/22 23:02:33 momjian Exp $
  *
  * NOTES
  *   Outside modules can create a lock table and acquire/release
@@ -87,11 +87,11 @@ bool Debug_deadlocks    = false;
 inline static bool
 LOCK_DEBUG_ENABLED(const LOCK * lock)
 {
-    return
-        (((LOCK_LOCKMETHOD(*lock) == DEFAULT_LOCKMETHOD && Trace_locks)
-          || (LOCK_LOCKMETHOD(*lock) == USER_LOCKMETHOD && Trace_userlocks))
-         && (lock->tag.relId >= (Oid) Trace_lock_oidmin))
-        || (Trace_lock_table && (lock->tag.relId == Trace_lock_table));
+   return
+       (((LOCK_LOCKMETHOD(*lock) == DEFAULT_LOCKMETHOD && Trace_locks)
+         || (LOCK_LOCKMETHOD(*lock) == USER_LOCKMETHOD && Trace_userlocks))
+        && (lock->tag.relId >= (Oid) Trace_lock_oidmin))
+       || (Trace_lock_table && (lock->tag.relId == Trace_lock_table));
 }
 
 
@@ -99,20 +99,20 @@ inline static void
 LOCK_PRINT(const char * where, const LOCK * lock, LOCKMODE type)
 {
    if (LOCK_DEBUG_ENABLED(lock))
-        elog(DEBUG,
-             "%s: lock(%lx) tbl(%d) rel(%u) db(%u) obj(%u) grantMask(%x) "
-             "req(%d,%d,%d,%d,%d,%d,%d)=%d "
-             "grant(%d,%d,%d,%d,%d,%d,%d)=%d wait(%d) type(%s)",
-             where, MAKE_OFFSET(lock),
-             lock->tag.lockmethod, lock->tag.relId, lock->tag.dbId,
-             lock->tag.objId.blkno, lock->grantMask,
-             lock->requested[1], lock->requested[2], lock->requested[3],
+       elog(DEBUG,
+            "%s: lock(%lx) tbl(%d) rel(%u) db(%u) obj(%u) grantMask(%x) "
+            "req(%d,%d,%d,%d,%d,%d,%d)=%d "
+            "grant(%d,%d,%d,%d,%d,%d,%d)=%d wait(%d) type(%s)",
+            where, MAKE_OFFSET(lock),
+            lock->tag.lockmethod, lock->tag.relId, lock->tag.dbId,
+            lock->tag.objId.blkno, lock->grantMask,
+            lock->requested[1], lock->requested[2], lock->requested[3],
             lock->requested[4], lock->requested[5], lock->requested[6],
             lock->requested[7], lock->nRequested,
-             lock->granted[1], lock->granted[2], lock->granted[3],
-             lock->granted[4], lock->granted[5], lock->granted[6],
-             lock->granted[7], lock->nGranted,
-             lock->waitProcs.size, lock_types[type]);
+            lock->granted[1], lock->granted[2], lock->granted[3],
+            lock->granted[4], lock->granted[5], lock->granted[6],
+            lock->granted[7], lock->nGranted,
+            lock->waitProcs.size, lock_types[type]);
 }
 
 
@@ -120,17 +120,17 @@ inline static void
 HOLDER_PRINT(const char * where, const HOLDER * holderP)
 {
    if (
-        (((HOLDER_LOCKMETHOD(*holderP) == DEFAULT_LOCKMETHOD && Trace_locks)
-          || (HOLDER_LOCKMETHOD(*holderP) == USER_LOCKMETHOD && Trace_userlocks))
-         && (((LOCK *)MAKE_PTR(holderP->tag.lock))->tag.relId >= (Oid) Trace_lock_oidmin))
+       (((HOLDER_LOCKMETHOD(*holderP) == DEFAULT_LOCKMETHOD && Trace_locks)
+         || (HOLDER_LOCKMETHOD(*holderP) == USER_LOCKMETHOD && Trace_userlocks))
+        && (((LOCK *)MAKE_PTR(holderP->tag.lock))->tag.relId >= (Oid) Trace_lock_oidmin))
        || (Trace_lock_table && (((LOCK *)MAKE_PTR(holderP->tag.lock))->tag.relId == Trace_lock_table))
-        )
-        elog(DEBUG,
-             "%s: holder(%lx) lock(%lx) tbl(%d) proc(%lx) xid(%u) hold(%d,%d,%d,%d,%d,%d,%d)=%d",
-             where, MAKE_OFFSET(holderP), holderP->tag.lock,
+       )
+       elog(DEBUG,
+            "%s: holder(%lx) lock(%lx) tbl(%d) proc(%lx) xid(%u) hold(%d,%d,%d,%d,%d,%d,%d)=%d",
+            where, MAKE_OFFSET(holderP), holderP->tag.lock,
             HOLDER_LOCKMETHOD(*(holderP)),
-             holderP->tag.proc, holderP->tag.xid,
-             holderP->holding[1], holderP->holding[2], holderP->holding[3],
+            holderP->tag.proc, holderP->tag.xid,
+            holderP->holding[1], holderP->holding[2], holderP->holding[3],
             holderP->holding[4], holderP->holding[5], holderP->holding[6],
             holderP->holding[7], holderP->nHolding);
 }
@@ -157,24 +157,24 @@ SPINLOCK  LockMgrLock;        /* in Shmem or created in
 static LOCKMASK BITS_OFF[MAX_LOCKMODES];
 static LOCKMASK BITS_ON[MAX_LOCKMODES];
 
-/* -----------------
+/*
  * Disable flag
- * -----------------
+ *
  */
 static bool LockingIsDisabled;
 
-/* -------------------
+/*
  * map from lockmethod to the lock table structure
- * -------------------
+ *
  */
 static LOCKMETHODTABLE *LockMethodTable[MAX_LOCK_METHODS];
 
 static int NumLockMethods;
 
-/* -------------------
+/*
  * InitLocks -- Init the lock module.  Create a private data
  *     structure for constructing conflict masks.
- * -------------------
+ *
  */
 void
 InitLocks(void)
@@ -190,9 +190,9 @@ InitLocks(void)
    }
 }
 
-/* -------------------
+/*
  * LockDisable -- sets LockingIsDisabled flag to TRUE or FALSE.
- * ------------------
+ *
  */
 void
 LockDisable(bool status)
@@ -200,9 +200,9 @@ LockDisable(bool status)
    LockingIsDisabled = status;
 }
 
-/* -----------------
+/*
  * Boolean function to determine current locking status
- * -----------------
+ *
  */
 bool
 LockingDisabled(void)
@@ -295,16 +295,16 @@ LockMethodTableInit(char *tabName,
    lockMethodTable = (LOCKMETHODTABLE *)
        MemoryContextAlloc(TopMemoryContext, sizeof(LOCKMETHODTABLE));
 
-   /* ------------------------
+   /*
     * find/acquire the spinlock for the table
-    * ------------------------
+    *
     */
    SpinAcquire(LockMgrLock);
 
-   /* -----------------------
+   /*
     * allocate a control structure from shared memory or attach to it
     * if it already exists.
-    * -----------------------
+    *
     */
    sprintf(shmemName, "%s (ctl)", tabName);
    lockMethodTable->ctl = (LOCKMETHODCTL *)
@@ -313,15 +313,15 @@ LockMethodTableInit(char *tabName,
    if (!lockMethodTable->ctl)
        elog(FATAL, "LockMethodTableInit: couldn't initialize %s", tabName);
 
-   /* -------------------
+   /*
     * no zero-th table
-    * -------------------
+    *
     */
    NumLockMethods = 1;
 
-   /* ----------------
+   /*
     * we're first - initialize
-    * ----------------
+    *
     */
    if (!found)
    {
@@ -330,18 +330,18 @@ LockMethodTableInit(char *tabName,
        lockMethodTable->ctl->lockmethod = NumLockMethods;
    }
 
-   /* --------------------
+   /*
     * other modules refer to the lock table by a lockmethod ID
-    * --------------------
+    *
     */
    LockMethodTable[NumLockMethods] = lockMethodTable;
    NumLockMethods++;
    Assert(NumLockMethods <= MAX_LOCK_METHODS);
 
-   /* ----------------------
+   /*
     * allocate a hash table for LOCK structs.  This is used
     * to store per-locked-object information.
-    * ----------------------
+    *
     */
    info.keysize = SHMEM_LOCKTAB_KEYSIZE;
    info.datasize = SHMEM_LOCKTAB_DATASIZE;
@@ -359,10 +359,10 @@ LockMethodTableInit(char *tabName,
        elog(FATAL, "LockMethodTableInit: couldn't initialize %s", tabName);
    Assert(lockMethodTable->lockHash->hash == tag_hash);
 
-   /* -------------------------
+   /*
     * allocate a hash table for HOLDER structs.  This is used
     * to store per-lock-holder information.
-    * -------------------------
+    *
     */
    info.keysize = SHMEM_HOLDERTAB_KEYSIZE;
    info.datasize = SHMEM_HOLDERTAB_DATASIZE;
@@ -528,9 +528,9 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag,
        return FALSE;
    }
 
-   /* --------------------
+   /*
     * if it's a new lock object, initialize it
-    * --------------------
+    *
     */
    if (!found)
    {
@@ -552,9 +552,9 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag,
        Assert(lock->nGranted <= lock->nRequested);
    }
 
-   /* ------------------
+   /*
     * Create the hash key for the holder table.
-    * ------------------
+    *
     */
    MemSet(&holdertag, 0, sizeof(HOLDERTAG)); /* must clear padding, needed */
    holdertag.lock = MAKE_OFFSET(lock);
@@ -623,20 +623,20 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag,
 #endif /* CHECK_DEADLOCK_RISK */
    }
 
-   /* ----------------
+   /*
     * lock->nRequested and lock->requested[] count the total number of
     * requests, whether granted or waiting, so increment those immediately.
     * The other counts don't increment till we get the lock.
-    * ----------------
+    *
     */
    lock->nRequested++;
    lock->requested[lockmode]++;
    Assert((lock->nRequested > 0) && (lock->requested[lockmode] > 0));
 
-   /* --------------------
+   /*
     * If I already hold one or more locks of the requested type,
     * just grant myself another one without blocking.
-    * --------------------
+    *
     */
    if (holder->holding[lockmode] > 0)
    {
@@ -646,10 +646,10 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag,
        return TRUE;
    }
 
-   /* --------------------
+   /*
     * If this process (under any XID) is a holder of the lock,
     * also grant myself another one without blocking.
-    * --------------------
+    *
     */
    LockCountMyLocks(holder->tag.lock, MyProc, myHolding);
    if (myHolding[lockmode] > 0)
@@ -660,11 +660,11 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag,
        return TRUE;
    }
 
-   /* --------------------
+   /*
     * If lock requested conflicts with locks requested by waiters,
     * must join wait queue.  Otherwise, check for conflict with
     * already-held locks.  (That's last because most complex check.)
-    * --------------------
+    *
     */
    if (lockMethodTable->ctl->conflictTab[lockmode] & lock->waitMask)
        status = STATUS_FOUND;
@@ -760,7 +760,7 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag,
    return status == STATUS_OK;
 }
 
-/* ----------------------------
+/*
  * LockCheckConflicts -- test whether requested lock conflicts
  *     with those already granted
  *
@@ -775,7 +775,7 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag,
  *
  * The caller can optionally pass the process's total holding counts, if
  * known.  If NULL is passed then these values will be computed internally.
- * ----------------------------
+ *
  */
 int
 LockCheckConflicts(LOCKMETHODTABLE *lockMethodTable,
@@ -792,7 +792,7 @@ LockCheckConflicts(LOCKMETHODTABLE *lockMethodTable,
                tmpMask;
    int         localHolding[MAX_LOCKMODES];
 
-   /* ----------------------------
+   /*
     * first check for global conflicts: If no locks conflict
     * with my request, then I get the lock.
     *
@@ -800,7 +800,7 @@ LockCheckConflicts(LOCKMETHODTABLE *lockMethodTable,
     * currently held locks.  conflictTable[lockmode] has a bit
     * set for each type of lock that conflicts with request.   Bitwise
     * compare tells if there is a conflict.
-    * ----------------------------
+    *
     */
    if (!(lockctl->conflictTab[lockmode] & lock->grantMask))
    {
@@ -808,12 +808,12 @@ LockCheckConflicts(LOCKMETHODTABLE *lockMethodTable,
        return STATUS_OK;
    }
 
-   /* ------------------------
+   /*
     * Rats.  Something conflicts. But it could still be my own
     * lock.  We have to construct a conflict mask
     * that does not reflect our own locks.  Locks held by the current
     * process under another XID also count as "our own locks".
-    * ------------------------
+    *
     */
    if (myHolding == NULL)
    {
@@ -831,12 +831,12 @@ LockCheckConflicts(LOCKMETHODTABLE *lockMethodTable,
            bitmask |= tmpMask;
    }
 
-   /* ------------------------
+   /*
     * now check again for conflicts.  'bitmask' describes the types
     * of locks held by other processes.  If one of these
     * conflicts with the kind of lock that I want, there is a
     * conflict and I have to sleep.
-    * ------------------------
+    *
     */
    if (!(lockctl->conflictTab[lockmode] & bitmask))
    {
@@ -935,7 +935,7 @@ WaitOnLock(LOCKMETHOD lockmethod, LOCKMODE lockmode,
    strcat(new_status, " waiting");
    set_ps_display(new_status);
 
-   /* -------------------
+   /*
     * NOTE: Think not to put any lock state cleanup after the call to
     * ProcSleep, in either the normal or failure path.  The lock state
     * must be fully set by the lock grantor, or by HandleDeadLock if we
@@ -944,7 +944,7 @@ WaitOnLock(LOCKMETHOD lockmethod, LOCKMODE lockmode,
     * after someone else grants us the lock, but before we've noticed it.
     * Hence, after granting, the locktable state must fully reflect the
     * fact that we own the lock; we can't do additional work on return.
-    * -------------------
+    *
     */
 
    if (ProcSleep(lockMethodTable,
@@ -952,11 +952,11 @@ WaitOnLock(LOCKMETHOD lockmethod, LOCKMODE lockmode,
                  lock,
                  holder) != STATUS_OK)
    {
-       /* -------------------
+       /*
         * We failed as a result of a deadlock, see HandleDeadLock().
         * Quit now.  Removal of the holder and lock objects, if no longer
         * needed, will happen in xact cleanup (see above for motivation).
-        * -------------------
+        *
         */
        LOCK_PRINT("WaitOnLock: aborting on lock", lock, lockmode);
        SpinRelease(lockMethodTable->ctl->masterLock);
@@ -1043,7 +1043,7 @@ LockRelease(LOCKMETHOD lockmethod, LOCKTAG *locktag,
 
 #ifdef LOCK_DEBUG
    if (lockmethod == USER_LOCKMETHOD && Trace_userlocks)
-        elog(DEBUG, "LockRelease: user lock tag [%u] %d", locktag->objId.blkno, lockmode);
+       elog(DEBUG, "LockRelease: user lock tag [%u] %d", locktag->objId.blkno, lockmode);
 #endif
 
    /* ???????? This must be changed when short term locks will be used */
@@ -1105,7 +1105,7 @@ LockRelease(LOCKMETHOD lockmethod, LOCKTAG *locktag,
        SpinRelease(masterLock);
 #ifdef USER_LOCKS
        if (!found && lockmethod == USER_LOCKMETHOD)
-            elog(NOTICE, "LockRelease: no lock with this tag");
+           elog(NOTICE, "LockRelease: no lock with this tag");
        else
 #endif
            elog(NOTICE, "LockRelease: holder table corrupted");
@@ -1150,7 +1150,7 @@ LockRelease(LOCKMETHOD lockmethod, LOCKTAG *locktag,
    Assert((lock->nGranted >= 0) && (lock->granted[lockmode] >= 0));
    Assert(lock->nGranted <= lock->nRequested);
 
-   /* --------------------------
+   /*
     * We need only run ProcLockWakeup if the released lock conflicts with
     * at least one of the lock types requested by waiter(s).  Otherwise
     * whatever conflict made them wait must still exist.  NOTE: before MVCC,
@@ -1158,18 +1158,18 @@ LockRelease(LOCKMETHOD lockmethod, LOCKTAG *locktag,
     * But that's not true anymore, because the remaining granted locks might
     * belong to some waiter, who could now be awakened because he doesn't
     * conflict with his own locks.
-    * --------------------------
+    *
     */
    if (lockMethodTable->ctl->conflictTab[lockmode] & lock->waitMask)
        wakeupNeeded = true;
 
    if (lock->nRequested == 0)
    {
-       /* ------------------
+       /*
         * if there's no one waiting in the queue,
         * we just released the last lock on this object.
         * Delete it from the lock table.
-        * ------------------
+        *
         */
        Assert(lockMethodTable->lockHash->hash == tag_hash);
        lock = (LOCK *) hash_search(lockMethodTable->lockHash,
@@ -1297,9 +1297,9 @@ LockReleaseAll(LOCKMETHOD lockmethod, PROC *proc,
        Assert(holder->nHolding >= 0);
        Assert(holder->nHolding <= lock->nRequested);
 
-       /* ------------------
+       /*
         * fix the general lock stats
-        * ------------------
+        *
         */
        if (lock->nRequested != holder->nHolding)
        {
@@ -1328,10 +1328,10 @@ LockReleaseAll(LOCKMETHOD lockmethod, PROC *proc,
        }
        else
        {
-           /* --------------
+           /*
             * This holder accounts for all the requested locks on the object,
             * so we can be lazy and just zero things out.
-            * --------------
+            *
             */
            lock->nRequested = 0;
            lock->nGranted = 0;
@@ -1368,10 +1368,10 @@ LockReleaseAll(LOCKMETHOD lockmethod, PROC *proc,
 
        if (lock->nRequested == 0)
        {
-           /* --------------------
+           /*
             * We've just released the last lock, so garbage-collect the
             * lock object.
-            * --------------------
+            *
             */
            LOCK_PRINT("LockReleaseAll: deleting", lock, 0);
            Assert(lockMethodTable->lockHash->hash == tag_hash);
@@ -1395,8 +1395,8 @@ next_item:
    SpinRelease(masterLock);
 
 #ifdef LOCK_DEBUG
-    if (lockmethod == USER_LOCKMETHOD ? Trace_userlocks : Trace_locks)
-        elog(DEBUG, "LockReleaseAll: done");
+   if (lockmethod == USER_LOCKMETHOD ? Trace_userlocks : Trace_locks)
+       elog(DEBUG, "LockReleaseAll: done");
 #endif
 
    return TRUE;
index 9ca3a6f858ad7fa13238d82c2df0008407549a8b..de094670bfb930804f93a0f293222bf494c38e2c 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: nbtree.h,v 1.53 2001/02/22 21:48:49 momjian Exp $
+ * $Id: nbtree.h,v 1.54 2001/02/22 23:02:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -67,7 +67,7 @@ typedef struct BTMetaPageData
 #define BTPageGetMeta(p) \
    ((BTMetaPageData *) &((PageHeader) p)->pd_linp[0])
 
-#define BTREE_METAPAGE 0   /* first page is meta */
+#define BTREE_METAPAGE 0           /* first page is meta */
 #define BTREE_MAGIC        0x053162    /* magic number of btree pages */
 
 #define BTreeInvalidParent(opaque) \
@@ -215,8 +215,8 @@ typedef BTStackData *BTStack;
  * items beginning in item 1.
  */
 
-#define P_HIKEY            ((OffsetNumber) 1)
-#define P_FIRSTKEY     ((OffsetNumber) 2)
+#define P_HIKEY                ((OffsetNumber) 1)
+#define P_FIRSTKEY         ((OffsetNumber) 2)
 #define P_FIRSTDATAKEY(opaque)  (P_RIGHTMOST(opaque) ? P_HIKEY : P_FIRSTKEY)
 
 /*
index 30ef783cd6915b71d036396c47a238cfa797b96c..5906445f37f1a96190336b2e885b9c5ab6780e17 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: lmgr.h,v 1.28 2001/01/24 19:43:27 momjian Exp $
+ * $Id: lmgr.h,v 1.29 2001/02/22 23:02:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 #define AccessShareLock            1       /* SELECT */
 #define RowShareLock           2       /* SELECT FOR UPDATE */
 #define RowExclusiveLock       3       /* INSERT, UPDATE, DELETE */
-#define ShareLock              4
-#define ShareRowExclusiveLock  5
-#define ExclusiveLock          6
-#define AccessExclusiveLock        7
-
+#define ShareLock              4       /* CREATE INDEX */
+#define ShareRowExclusiveLock  5       /* like EXCLUSIVE MODE, allows SHARE ROW */
+#define ExclusiveLock          6       /* blocks ROW SHARE/SELECT...FOR UPDATE */
+#define AccessExclusiveLock        7       /* ALTER TABLE, DROP TABLE, VACUUM, and
+                                        * unqualified LOCK TABLE 
+                                        */
 extern LOCKMETHOD LockTableId;
 
 
index 0ada6eaccfebee6e5b18db0934e3746dce7bdae4..9c71366d71c93a8eef97cfecac04ad3894db464f 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: lock.h,v 1.44 2001/01/25 03:31:16 tgl Exp $
+ * $Id: lock.h,v 1.45 2001/02/22 23:02:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -60,7 +60,7 @@ typedef int LOCKMODE;
 typedef int LOCKMETHOD;
 
 /* MAX_LOCKMODES cannot be larger than the # of bits in LOCKMASK */
-#define MAX_LOCKMODES  8
+#define MAX_LOCKMODES          8
 
 /*
  * MAX_LOCK_METHODS corresponds to the number of spin locks allocated in