pgsql: Fix race condition at backend exit when deleting element in sync - Mailing list pgsql-committers

From Michael Paquier
Subject pgsql: Fix race condition at backend exit when deleting element in sync
Date
Msg-id E1iQX9Z-0008J5-Cl@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix race condition at backend exit when deleting element in syncrep queue

When a backend exits, it gets deleted from the syncrep queue if present.
The queue was checked without SyncRepLock taken in exclusive mode, so it
would have been possible for a backend to remove itself after a WAL
sender already did the job.  Fix this issue based on a suggestion from
Fujii Masao, by first checking the queue without the lock.  Then, if the
backend is present in the queue, take the lock and perform an additional
lookup check before doing the element deletion.

Author: Dongming Liu
Reviewed-by: Kyotaro Horiguchi, Fujii Masao, Michael Paquier
Discussion: https://postgr.es/m/a0806273-8bbb-43b3-bbe1-c45a58f6ae21.lingce.ldm@alibaba-inc.com
Backpatch-through: 9.4

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/52684bc7d9579fefa69e09797e798dbe2b0acbd2

Modified Files
--------------
src/backend/replication/syncrep.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)


pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: pgsql: Add some assertions to view reloption macros
Next
From: Michael Paquier
Date:
Subject: pgsql: Add some assertions in syncrep.c