aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Korotkov <akorotkov@postgresql.org>2018-09-22 16:22:30 +0300
committerAlexander Korotkov <akorotkov@postgresql.org>2018-09-22 16:22:30 +0300
commit2f39106a209e647d7b1895331fca115f9bb6ec8d (patch)
tree5e0dfee59c3ce48a5cd6e5b804d250f8ef784df2 /src
parentdb361db2fce7491303f49243f652c75c084f5a19 (diff)
downloadpostgresql-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.c10
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;