aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Misch <noah@leadboat.com>2019-10-18 20:21:10 -0700
committerNoah Misch <noah@leadboat.com>2019-10-18 20:21:10 -0700
commit48cc59ed24f95fa171b12ba1b461e6dc72d62b2b (patch)
tree7061b25d3bfe6d765c6cdff019503cb08b75d826
parent30ee5d17c20dbb282a9952b3048d6ad52d56c371 (diff)
downloadpostgresql-48cc59ed24f95fa171b12ba1b461e6dc72d62b2b.tar.gz
postgresql-48cc59ed24f95fa171b12ba1b461e6dc72d62b2b.zip
Use standard compare_exchange loop style in ProcArrayGroupClearXid().
Besides style, this might improve performance in the contended case. Reviewed by Amit Kapila. Discussion: https://postgr.es/m/20191015035348.GA4166224@rfd.leadboat.com
-rw-r--r--src/backend/storage/ipc/procarray.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
index 8abcfdf841f..3da53074b18 100644
--- a/src/backend/storage/ipc/procarray.c
+++ b/src/backend/storage/ipc/procarray.c
@@ -493,9 +493,9 @@ ProcArrayGroupClearXid(PGPROC *proc, TransactionId latestXid)
/* Add ourselves to the list of processes needing a group XID clear. */
proc->procArrayGroupMember = true;
proc->procArrayGroupMemberXid = latestXid;
+ nextidx = pg_atomic_read_u32(&procglobal->procArrayGroupFirst);
while (true)
{
- nextidx = pg_atomic_read_u32(&procglobal->procArrayGroupFirst);
pg_atomic_write_u32(&proc->procArrayGroupNext, nextidx);
if (pg_atomic_compare_exchange_u32(&procglobal->procArrayGroupFirst,