summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-08-17 22:41:12 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-08-17 22:41:12 +0000
commitde9c553f6bd931c311e6e05e172bb860dc8f0d5e (patch)
treef3dd0dea54a158c4c97b34b045a12a4c21a59adc
parentc771838106a4fd9289580a93b24f27d6c67b7fc7 (diff)
Clean up locktable init code per recent gripe from Kurt Roeckx.
No change in behavior, but old code would have failed to detect overrun of MAX_LOCKMODES.
-rw-r--r--src/backend/storage/lmgr/lmgr.c6
-rw-r--r--src/backend/storage/lmgr/lock.c13
2 files changed, 9 insertions, 10 deletions
diff --git a/src/backend/storage/lmgr/lmgr.c b/src/backend/storage/lmgr/lmgr.c
index fe5acacbf5e..12845f5593d 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 d552028b374..8650931e2be 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);