diff --git a/src/backend/storage/lmgr/lmgr.c b/src/backend/storage/lmgr/lmgr.c
index fe5acacbf5ec01b13bfbc1e548a35fb08b15fa36..12845f5593d24b7454aa8f10f72caccfeb93b78e 100644
--- a/src/backend/storage/lmgr/lmgr.c
+++ b/src/backend/storage/lmgr/lmgr.c
@@ -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;
 
diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c
index d552028b374d8bc631ea8e3f84e231b42fdefd43..8650931e2be422f6239772f10a5e5cbeddf1de03 100644
--- a/src/backend/storage/lmgr/lock.c
+++ b/src/backend/storage/lmgr/lock.c
@@ -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);