Remove bogus 'xid loop detected' check, which actually wasn't detecting

loops, but just arbitrarily failing at 1000 locks.
This commit is contained in:
Tom Lane 2000-04-30 21:23:31 +00:00
parent 2f19d11fc8
commit e0095c6c42

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.66 2000/02/22 09:55:20 inoue Exp $ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.67 2000/04/30 21:23:31 tgl Exp $
* *
* NOTES * NOTES
* Outside modules can create a lock table and acquire/release * Outside modules can create a lock table and acquire/release
@ -492,14 +492,14 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag, LOCKMODE lockmode)
int is_user_lock; int is_user_lock;
is_user_lock = (lockmethod == USER_LOCKMETHOD); is_user_lock = (lockmethod == USER_LOCKMETHOD);
#ifdef USER_LOCKS_DEBUG
if (is_user_lock) if (is_user_lock)
{ {
#ifdef USER_LOCKS_DEBUG
TPRINTF(TRACE_USERLOCKS, "LockAcquire: user lock [%u] %s", TPRINTF(TRACE_USERLOCKS, "LockAcquire: user lock [%u] %s",
locktag->objId.blkno, locktag->objId.blkno,
lock_types[lockmode]); lock_types[lockmode]);
#endif
} }
#endif
#endif #endif
/* ???????? This must be changed when short term locks will be used */ /* ???????? This must be changed when short term locks will be used */
@ -1266,14 +1266,11 @@ LockReleaseAll(LOCKMETHOD lockmethod, SHM_QUEUE *lockQueue)
LOCK *lock; LOCK *lock;
bool found; bool found;
int trace_flag; int trace_flag;
int xidtag_lockmethod; int xidtag_lockmethod,
#ifdef USER_LOCKS
int is_user_lock_table,
count,
nleft; nleft;
count = nleft = 0; #ifdef USER_LOCKS
int is_user_lock_table;
is_user_lock_table = (lockmethod == USER_LOCKMETHOD); is_user_lock_table = (lockmethod == USER_LOCKMETHOD);
trace_flag = (lockmethod == 2) ? TRACE_USERLOCKS : TRACE_LOCKS; trace_flag = (lockmethod == 2) ? TRACE_USERLOCKS : TRACE_LOCKS;
@ -1283,6 +1280,8 @@ LockReleaseAll(LOCKMETHOD lockmethod, SHM_QUEUE *lockQueue)
TPRINTF(trace_flag, "LockReleaseAll: lockmethod=%d, pid=%d", TPRINTF(trace_flag, "LockReleaseAll: lockmethod=%d, pid=%d",
lockmethod, MyProcPid); lockmethod, MyProcPid);
nleft = 0;
Assert(lockmethod < NumLockMethods); Assert(lockmethod < NumLockMethods);
lockMethodTable = LockMethodTable[lockmethod]; lockMethodTable = LockMethodTable[lockmethod];
if (!lockMethodTable) if (!lockMethodTable)
@ -1304,16 +1303,6 @@ LockReleaseAll(LOCKMETHOD lockmethod, SHM_QUEUE *lockQueue)
{ {
bool wakeupNeeded = false; bool wakeupNeeded = false;
/*
* Sometimes the queue appears to be messed up.
*/
if (count++ > 1000)
{
elog(NOTICE, "LockReleaseAll: xid loop detected, giving up");
nleft = 0;
break;
}
/* --------------------------- /* ---------------------------
* XXX Here we assume the shared memory queue is circular and * XXX Here we assume the shared memory queue is circular and
* that we know its internal structure. Should have some sort of * that we know its internal structure. Should have some sort of
@ -1485,9 +1474,7 @@ LockReleaseAll(LOCKMETHOD lockmethod, SHM_QUEUE *lockQueue)
ProcLockWakeup(waitQueue, lockmethod, lock); ProcLockWakeup(waitQueue, lockmethod, lock);
} }
#ifdef USER_LOCKS
next_item: next_item:
#endif
if (done) if (done)
break; break;
SHMQueueFirst(&xidLook->queue, (Pointer *) &tmp, &tmp->queue); SHMQueueFirst(&xidLook->queue, (Pointer *) &tmp, &tmp->queue);