• Michael Paquier's avatar
    Fix and document lock handling for in-memory replication slot data · 9e149c84
    Michael Paquier authored
    While debugging issues on HEAD for the new slot forwarding feature of
    Postgres 11, some monitoring of the code surrounding in-memory slot data
    has proved that the lock handling may cause inconsistent data to be read
    by read-only callers of slot functions, particularly
    pg_get_replication_slots() which fetches data for the system view
    pg_replication_slots, or modules looking directly at slot information.
    
    The code paths involved in those problems concern logical decoding
    initialization (down to 9.4) and WAL reservation for slots (new as of
    10).
    
    A set of comments documenting all the lock handlings, particularly the
    dependency with LW locks for slots and the in_use flag as well as the
    internal mutex lock is added, based on a suggested by Simon Riggs.
    
    Some of the fixed code exists down to 9.4 where WAL decoding has been
    introduced, but as those race conditions are really unlikely going to
    happen as those concern code paths for slot and decoding creation, just
    fix the problem on HEAD.
    
    Author: Michael Paquier
    
    Discussion: https://postgr.es/m/20180528085747.GA27845@paquier.xyz
    9e149c84
slot.c 41 KB