Clean up locktable init code per recent gripe from Kurt Roeckx.
authorTom Lane
Sun, 17 Aug 2003 22:41:12 +0000 (22:41 +0000)
committerTom Lane
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 fe5acacbf5ec01b13bfbc1e548a35fb08b15fa36..12845f5593d24b7454aa8f10f72caccfeb93b78e 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 d552028b374d8bc631ea8e3f84e231b42fdefd43..8650931e2be422f6239772f10a5e5cbeddf1de03 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);