Hi, When testing the new parameter in pg_replication_origin_session_setup(), I noticed a bug allowing the origin in use to be dropped. The issue arises when two backends set up the same origin; if the second backend resets the origin first, it resets the acquired_by flag regardless of whether the first backend is using it. This allows the origin to be dropped, enabling the slot in shared memory to be reused, which is unintended.
About the fix, simply adding a check for acquired_by field does not work, because if the first backend resets the origin first, it still risks being dropped while second backend uses it. To fully resolve this, I tried to add a reference count (refcount) for the origin. The count is incremented when a backend sets up the origin and decremented upon a reset. As a result, the replication origin is only dropped when the reference count reaches zero. Thanks to Kuroda-San for discussing and reviewing this patch off-list. Best Regards, Hou zj
v1-0001-Fix-unintended-drop-of-active-replication-origins.patch
Description: v1-0001-Fix-unintended-drop-of-active-replication-origins.patch
