OSDN Git Service

Clean up locktable init code per recent gripe from Kurt Roeckx.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 17 Aug 2003 22:41:12 +0000 (22:41 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 17 Aug 2003 22:41:12 +0000 (22:41 +0000)
No change in behavior, but old code would have failed to detect
overrun of MAX_LOCKMODES.

src/backend/storage/lmgr/lmgr.c
src/backend/storage/lmgr/lock.c

index fe5acac..12845f5 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.58 2003/08/04 02:40:03 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.59 2003/08/17 22:41:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -76,8 +76,10 @@ InitLockTable(int maxBackends)
 {
        int                     lockmethod;
 
+       /* number of lock modes is lengthof()-1 because of dummy zero */
        lockmethod = LockMethodTableInit("LockTable",
-                                                                        LockConflicts, MAX_LOCKMODES - 1,
+                                                                        LockConflicts,
+                                                                        lengthof(LockConflicts) - 1,
                                                                         maxBackends);
        LockTableId = lockmethod;
 
index d552028..8650931 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.126 2003/08/04 02:40:03 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.127 2003/08/17 22:41:12 tgl Exp $
  *
  * NOTES
  *       Outside modules can create a lock table and acquire/release
@@ -212,8 +212,8 @@ LockMethodInit(LOCKMETHODTABLE *lockMethodTable,
        int                     i;
 
        lockMethodTable->numLockModes = numModes;
-       numModes++;
-       for (i = 0; i < numModes; i++, conflictsP++)
+       /* copies useless zero element as well as the N lockmodes */
+       for (i = 0; i <= numModes; i++, conflictsP++)
                lockMethodTable->conflictTab[i] = *conflictsP;
 }
 
@@ -241,11 +241,8 @@ LockMethodTableInit(char *tabName,
                                max_table_size;
 
        if (numModes >= MAX_LOCKMODES)
-       {
-               elog(WARNING, "too many lock types %d (limit is %d)",
-                        numModes, MAX_LOCKMODES);
-               return INVALID_LOCKMETHOD;
-       }
+               elog(ERROR, "too many lock types %d (limit is %d)",
+                        numModes, MAX_LOCKMODES-1);
 
        /* Compute init/max size to request for lock hashtables */
        max_table_size = NLOCKENTS(maxBackends);