Remove bogus 'xid loop detected' check, which actually wasn't detecting
loops, but just arbitrarily failing at 1000 locks.
This commit is contained in:
parent
2f19d11fc8
commit
e0095c6c42
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user