diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-08-17 22:41:12 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-08-17 22:41:12 +0000 |
commit | de9c553f6bd931c311e6e05e172bb860dc8f0d5e (patch) | |
tree | f3dd0dea54a158c4c97b34b045a12a4c21a59adc | |
parent | c771838106a4fd9289580a93b24f27d6c67b7fc7 (diff) | |
download | postgresql-de9c553f6bd931c311e6e05e172bb860dc8f0d5e.tar.gz postgresql-de9c553f6bd931c311e6e05e172bb860dc8f0d5e.zip |
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.c | 6 | ||||
-rw-r--r-- | src/backend/storage/lmgr/lock.c | 13 |
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); |