diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2018-09-22 16:22:30 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2018-09-22 16:22:30 +0300 |
commit | 2f39106a209e647d7b1895331fca115f9bb6ec8d (patch) | |
tree | 5e0dfee59c3ce48a5cd6e5b804d250f8ef784df2 /src | |
parent | db361db2fce7491303f49243f652c75c084f5a19 (diff) | |
download | postgresql-2f39106a209e647d7b1895331fca115f9bb6ec8d.tar.gz postgresql-2f39106a209e647d7b1895331fca115f9bb6ec8d.zip |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/storage/ipc/procarray.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index bd20497d81a..bf2f4dbed2d 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -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; |