Fix the race condition in ReplicationSlotAcquire().
authorAmit Kapila <akapila@postgresql.org>
Thu, 27 Feb 2025 04:17:04 +0000 (09:47 +0530)
committerAmit Kapila <akapila@postgresql.org>
Thu, 27 Feb 2025 04:17:04 +0000 (09:47 +0530)
commit8709dccc793da0c0c6619cafa182c8e67a871154
treef982be6fa381f4bf4609f467b43daa167619fd25
parent845511a72ad01838c9e1766e031d2862cd021801
Fix the race condition in ReplicationSlotAcquire().

After commit f41d8468dd, a process could acquire and use a replication
slot that had just been invalidated, leading to failures while accessing
WAL.

To ensure that we don't accidentally start using invalid slots, we must
perform the invalidation check after acquiring the slot or under the
spinlock where we associate the slot with a particular process. We choose
the earlier method to keep the code simple.

Reported-by: Hou Zhijie <houzj.fnst@fujitsu.com>
Author: Nisha Moond <nisha.moond412@gmail.com>
Reviewed-by: Hou Zhijie <houzj.fnst@fujitsu.com>
Reviewed-by: Amit Kapila <amit.kapila16@gmail.com>
Discussion: https://postgr.es/m/CABdArM7J-LbGoMPGUPiFiLOyB_TZ5+YaZb=HMES0mQqzVTn8Gg@mail.gmail.com
src/backend/replication/slot.c