• Andres Freund's avatar
    Fix race condition in snapshot caching when 2PC is used. · 07f32fcd
    Andres Freund authored
    When preparing a transaction xactCompletionCount needs to be
    incremented, even though the transaction has not committed
    yet. Otherwise the snapshot used within the transaction otherwise can
    get reused outside of the prepared transaction. As GetSnapshotData()
    does not include the current xid when building a snapshot, reuse would
    not be correct.
    
    Somewhat surprisingly the regression tests only rarely show incorrect
    results without the fix. The reason for that is that often the
    snapshot's xmax will be >= the backend xid, yielding a snapshot that
    is correct, despite the bug.
    
    I'm working on a reliable test for the bug, but it seems worth seeing
    whether this fixes all the BF failures while I do.
    
    Author: Andres Freund <andres@anarazel.de>
    Discussion: https://postgr.es/m/E1k7tGP-0005V0-5k@gemulon.postgresql.org
    07f32fcd
procarray.c 154 KB