• Alvaro Herrera's avatar
    Relax lock level for setting PGPROC->statusFlags · 27838981
    Alvaro Herrera authored
    We don't actually need a lock to set PGPROC->statusFlags itself; what we
    do need is a shared lock on either XidGenLock or ProcArrayLock in order to
    ensure MyProc->pgxactoff keeps still while we modify the mirror array in
    ProcGlobal->statusFlags.  Some places were using an exclusive lock for
    that, which is excessive.  Relax those to use shared lock only.
    
    procarray.c has a couple of places with somewhat brittle assumptions
    about PGPROC changes: ProcArrayEndTransaction uses only shared lock, so
    it's permissible to change MyProc only.  On the other hand,
    ProcArrayEndTransactionInternal also changes other procs, so it must
    hold exclusive lock.  Add asserts to ensure those assumptions continue
    to hold.
    
    Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
    Reviewed-by: default avatarMichael Paquier <michael@paquier.xyz>
    Discussion: https://postgr.es/m/20201117155501.GA13805@alvherre.pgsql
    27838981
logical.c 47.1 KB