• Alvaro Herrera's avatar
    Fix race conditions in replication slot operations · 9915de6c
    Alvaro Herrera authored
    It is relatively easy to get a replication slot to look as still active
    while one process is in the process of getting rid of it; when some
    other process tries to "acquire" the slot, it would fail with an error
    message of "replication slot XYZ is active for PID N".
    
    The error message in itself is fine, except that when the intention is
    to drop the slot, it is unhelpful: the useful behavior would be to wait
    until the slot is no longer acquired, so that the drop can proceed.  To
    implement this, we use a condition variable so that slot acquisition can
    be told to wait on that condition variable if the slot is already
    acquired, and we make any change in active_pid broadcast a signal on the
    condition variable.  Thus, as soon as the slot is released, the drop
    will proceed properly.
    
    Reported by: Tom Lane
    Discussion: https://postgr.es/m/11904.1499039688@sss.pgh.pa.us
    Authors: Petr Jelínek, Álvaro Herrera
    9915de6c
logicalfuncs.c 10.9 KB