mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Fix failure in CreateCheckPoint on some Alpha boxes --- it's not OK to
assume that TAS() will always succeed the first time, even if the lock is known to be free. Also, make sure that code will eventually time out and report a stuck spinlock, rather than looping forever. Small cleanups in s_lock.h, too.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.100 2000/12/28 13:00:21 vadim Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.101 2000/12/29 21:31:21 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -1987,7 +1987,7 @@ LockBuffer(Buffer buffer, int mode)
|
||||
while (buf->ri_lock || buf->w_lock)
|
||||
{
|
||||
S_UNLOCK(&(buf->cntx_lock));
|
||||
s_lock_sleep(i++);
|
||||
S_LOCK_SLEEP(&(buf->cntx_lock), i++);
|
||||
S_LOCK(&(buf->cntx_lock));
|
||||
}
|
||||
(buf->r_locks)++;
|
||||
@ -2013,7 +2013,7 @@ LockBuffer(Buffer buffer, int mode)
|
||||
buf->ri_lock = true;
|
||||
}
|
||||
S_UNLOCK(&(buf->cntx_lock));
|
||||
s_lock_sleep(i++);
|
||||
S_LOCK_SLEEP(&(buf->cntx_lock), i++);
|
||||
S_LOCK(&(buf->cntx_lock));
|
||||
}
|
||||
buf->w_lock = true;
|
||||
|
Reference in New Issue
Block a user