From: | Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Fix ordering of operations in SyncRepWakeQueue to avoid assertio |
Date: | 2017-07-12 12:45:19 |
Message-ID: | E1dVH15-0001fo-WA@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix ordering of operations in SyncRepWakeQueue to avoid assertion failure.
Commit 14e8803f1 removed the locking in SyncRepWaitForLSN, but that
introduced a race condition, where SyncRepWaitForLSN might see
syncRepState already set to SYNC_REP_WAIT_COMPLETE, but the process was
not yet removed from the queue. That tripped the assertion, that the
process should no longer be in the uqeue. Reorder the operations in
SyncRepWakeQueue to remove the process from the queue first, and update
syncRepState only after that, and add a memory barrier in between to make
sure the operations are made visible to other processes in that order.
Fixes bug #14721 reported by Const Zhang. Analysis and fix by Thomas Munro.
Backpatch down to 9.5, where the locking was removed.
Discussion: https://www.postgresql.org/message-id/20170629023623.1480.26508%40wrigleys.postgresql.org
Branch
------
REL9_5_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/9c32c29ee7d32cb849971b0c3a79aaa79a5d8264
Modified Files
--------------
src/backend/replication/syncrep.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Heikki Linnakangas | 2017-07-12 14:11:07 | pgsql: Fix variable and type name in comment. |
Previous Message | Heikki Linnakangas | 2017-07-12 09:32:22 | pgsql: Remove unnecessary braces, to match the surrounding style. |