mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
Replace CAS loop with single TAS in ProcArrayGroupClearXid()
Single pg_atomic_exchange_u32() is expected to be faster than loop of pg_atomic_compare_exchange_u32(). Also, it would be consistent with clog group update code. Discussion: https://postgr.es/m/CAPpHfdtxLsC-bqfxFcHswZ91OxXcZVNDBBVfg9tAWU0jvn1tQA%40mail.gmail.com Reviewed-by: Amit Kapila
This commit is contained in:
parent
db361db2fc
commit
2f39106a20
@ -542,14 +542,8 @@ ProcArrayGroupClearXid(PGPROC *proc, TransactionId latestXid)
|
||||
* group XID clearing, saving a pointer to the head of the list. Trying
|
||||
* to pop elements one at a time could lead to an ABA problem.
|
||||
*/
|
||||
while (true)
|
||||
{
|
||||
nextidx = pg_atomic_read_u32(&procglobal->procArrayGroupFirst);
|
||||
if (pg_atomic_compare_exchange_u32(&procglobal->procArrayGroupFirst,
|
||||
&nextidx,
|
||||
INVALID_PGPROCNO))
|
||||
break;
|
||||
}
|
||||
nextidx = pg_atomic_exchange_u32(&procglobal->procArrayGroupFirst,
|
||||
INVALID_PGPROCNO);
|
||||
|
||||
/* Remember head of list so we can perform wakeups after dropping lock. */
|
||||
wakeidx = nextidx;
|
||||
|
Loading…
x
Reference in New Issue
Block a user