Re: Minor lmgr code cleanup - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: Minor lmgr code cleanup
Date
Msg-id 200309080451.h884pjj05039@candle.pha.pa.us
Whole thread Raw
In response to Re: Minor lmgr code cleanup  (Manfred Koizar <mkoi-pg@aon.at>)
Responses Re: Minor lmgr code cleanup  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: Minor lmgr code cleanup  (Manfred Koizar <mkoi-pg@aon.at>)
List pgsql-patches
This has been saved for the 7.5 release:

    http:/momjian.postgresql.org/cgi-bin/pgpatches2

---------------------------------------------------------------------------

Manfred Koizar wrote:
> On Sun, 07 Sep 2003 10:19:07 -0400, Tom Lane <tgl@sss.pgh.pa.us>
> wrote:
> >> +#define BITS_OFF(i) ~(1 << (i))
> >
> >I'd put another pair of parens around that.  Also, it might be worth
> >moving into a header file.  There is at least one place in proc.c that
> >manipulates lock masks using explicit shifts, because BITS_ON/BITS_OFF
> >weren't visible outside lock.c.
>
> Done.  Small patch attached, should be applied after the large patch.
> Big fat all-in-one patch available on request.
>
> >BTW, did you check that the code still compiles with LOCK_DEBUG enabled?
>
> No, I didn't and it didn't. :-(  Corrected.
>
> >How about contrib/userlock?
>
> Unaffected by my changes, still works AFAICT.
>
> Servus
>  Manfred

> diff -ruN ../base/src/backend/storage/lmgr/lock.c src/backend/storage/lmgr/lock.c
> --- ../base/src/backend/storage/lmgr/lock.c    2003-09-06 23:01:05.000000000 +0200
> +++ src/backend/storage/lmgr/lock.c    2003-09-07 07:53:16.000000000 +0200
> @@ -111,7 +111,7 @@
>               "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.lockmethodid, 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],
> @@ -150,12 +150,6 @@
>
>
>  /*
> - * These are to simplify some bit arithmetic.
> - */
> -#define BITS_ON(i) (1 << (i))
> -#define BITS_OFF(i) ~(1 << (i))
> -
> -/*
>   * map from lock method id to the lock table structure
>   */
>  static LockMethod LockMethods[MAX_LOCK_METHODS];
> @@ -654,15 +648,12 @@
>           * Construct bitmask of locks this process holds on this object.
>           */
>          {
> -            int            heldLocks = 0;
> -            int            tmpMask;
> +            LOCKMASK        heldLocks = 0;
>
> -            for (i = 1, tmpMask = 2;
> -                 i <= lockMethodTable->numLockModes;
> -                 i++, tmpMask <<= 1)
> +            for (i = 1; i <= lockMethodTable->numLockModes; i++)
>              {
>                  if (myHolding[i] > 0)
> -                    heldLocks |= tmpMask;
> +                    heldLocks |= LOCKBIT_ON(i);
>              }
>              MyProc->heldLocks = heldLocks;
>          }
> @@ -725,9 +716,8 @@
>                     int *myHolding)        /* myHolding[] array or NULL */
>  {
>      int            numLockModes = lockMethodTable->numLockModes;
> -    int            bitmask;
> -    int            i,
> -                tmpMask;
> +    LOCKMASK    bitmask;
> +    int            i;
>      int            localHolding[MAX_LOCKMODES];
>
>      /*
> @@ -760,11 +750,10 @@
>
>      /* Compute mask of lock types held by other processes */
>      bitmask = 0;
> -    tmpMask = 2;
> -    for (i = 1; i <= numLockModes; i++, tmpMask <<= 1)
> +    for (i = 1; i <= numLockModes; i++)
>      {
>          if (lock->granted[i] != myHolding[i])
> -            bitmask |= tmpMask;
> +            bitmask |= LOCKBIT_ON(i);
>      }
>
>      /*
> @@ -830,9 +819,9 @@
>  {
>      lock->nGranted++;
>      lock->granted[lockmode]++;
> -    lock->grantMask |= BITS_ON(lockmode);
> +    lock->grantMask |= LOCKBIT_ON(lockmode);
>      if (lock->granted[lockmode] == lock->requested[lockmode])
> -        lock->waitMask &= BITS_OFF(lockmode);
> +        lock->waitMask &= LOCKBIT_OFF(lockmode);
>      LOCK_PRINT("GrantLock", lock, lockmode);
>      Assert((lock->nGranted > 0) && (lock->granted[lockmode] > 0));
>      Assert(lock->nGranted <= lock->nRequested);
> @@ -945,7 +934,7 @@
>      waitLock->requested[lockmode]--;
>      /* don't forget to clear waitMask bit if appropriate */
>      if (waitLock->granted[lockmode] == waitLock->requested[lockmode])
> -        waitLock->waitMask &= BITS_OFF(lockmode);
> +        waitLock->waitMask &= LOCKBIT_OFF(lockmode);
>
>      /* Clean up the proc's own state */
>      proc->waitLock = NULL;
> @@ -1071,7 +1060,7 @@
>      if (lock->granted[lockmode] == 0)
>      {
>          /* change the conflict mask.  No more of this lock type. */
> -        lock->grantMask &= BITS_OFF(lockmode);
> +        lock->grantMask &= LOCKBIT_OFF(lockmode);
>      }
>
>      LOCK_PRINT("LockRelease: updated", lock, lockmode);
> @@ -1237,7 +1226,7 @@
>                      lock->granted[i] -= proclock->holding[i];
>                      Assert(lock->requested[i] >= 0 && lock->granted[i] >= 0);
>                      if (lock->granted[i] == 0)
> -                        lock->grantMask &= BITS_OFF(i);
> +                        lock->grantMask &= LOCKBIT_OFF(i);
>
>                      /*
>                       * Read comments in LockRelease
> diff -ruN ../base/src/backend/storage/lmgr/proc.c src/backend/storage/lmgr/proc.c
> --- ../base/src/backend/storage/lmgr/proc.c    2003-09-06 22:43:50.000000000 +0200
> +++ src/backend/storage/lmgr/proc.c    2003-09-07 07:35:06.000000000 +0200
> @@ -531,7 +531,7 @@
>  {
>      LWLockId    masterLock = lockMethodTable->masterLock;
>      PROC_QUEUE *waitQueue = &(lock->waitProcs);
> -    int            myHeldLocks = MyProc->heldLocks;
> +    LOCKMASK    myHeldLocks = MyProc->heldLocks;
>      bool        early_deadlock = false;
>      PGPROC       *proc;
>      int            i;
> @@ -556,7 +556,7 @@
>       */
>      if (myHeldLocks != 0)
>      {
> -        int            aheadRequests = 0;
> +        LOCKMASK    aheadRequests = 0;
>
>          proc = (PGPROC *) MAKE_PTR(waitQueue->links.next);
>          for (i = 0; i < waitQueue->size; i++)
> @@ -596,7 +596,7 @@
>                  break;
>              }
>              /* Nope, so advance to next waiter */
> -            aheadRequests |= (1 << proc->waitLockMode);
> +            aheadRequests |= LOCKBIT_ON(proc->waitLockMode);
>              proc = (PGPROC *) MAKE_PTR(proc->links.next);
>          }
>
> @@ -618,7 +618,7 @@
>      SHMQueueInsertBefore(&(proc->links), &(MyProc->links));
>      waitQueue->size++;
>
> -    lock->waitMask |= (1 << lockmode);
> +    lock->waitMask |= LOCKBIT_ON(lockmode);
>
>      /* Set up wait information in PGPROC object, too */
>      MyProc->waitLock = lock;
> @@ -755,7 +755,7 @@
>      PROC_QUEUE *waitQueue = &(lock->waitProcs);
>      int            queue_size = waitQueue->size;
>      PGPROC       *proc;
> -    int            aheadRequests = 0;
> +    LOCKMASK    aheadRequests = 0;
>
>      Assert(queue_size >= 0);
>
> @@ -796,7 +796,7 @@
>               * Cannot wake this guy. Remember his request for later
>               * checks.
>               */
> -            aheadRequests |= (1 << lockmode);
> +            aheadRequests |= LOCKBIT_ON(lockmode);
>              proc = (PGPROC *) MAKE_PTR(proc->links.next);
>          }
>      }
> diff -ruN ../base/src/include/storage/lock.h src/include/storage/lock.h
> --- ../base/src/include/storage/lock.h    2003-09-06 22:45:16.000000000 +0200
> +++ src/include/storage/lock.h    2003-09-07 07:25:13.000000000 +0200
> @@ -46,6 +46,9 @@
>  /* MAX_LOCKMODES cannot be larger than the # of bits in LOCKMASK */
>  #define MAX_LOCKMODES        10
>
> +#define LOCKBIT_ON(lockmode) (1 << (lockmode))
> +#define LOCKBIT_OFF(lockmode) (~(1 << (lockmode)))
> +
>  typedef uint16 LOCKMETHODID;
>  /* MAX_LOCK_METHODS is the number of distinct lock control tables allowed */
>  #define MAX_LOCK_METHODS    3

>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

pgsql-patches by date:

Previous
From: Tom Lane
Date:
Subject: Re: Minor lmgr code cleanup
Next
From: Bruce Momjian
Date:
Subject: Re: Minor lmgr code cleanup