• Tom Lane's avatar
    Fix volatile-safety issue in asyncQueueReadAllNotifications(). · c58accd7
    Tom Lane authored
    The "pos" variable is modified within PG_TRY and then referenced
    within PG_CATCH, so for strict POSIX conformance it must be marked
    volatile.  Superficially the code looked safe because pos's address
    was taken, which was sufficient to force it into memory ... but it's
    not sufficient to ensure that the compiler applies updates exactly
    where the program text says to.  The volatility marking has to extend
    into a couple of subroutines too, but I think that's probably a good
    thing because the risk of out-of-order updates is mostly in those
    subroutines not asyncQueueReadAllNotifications() itself.  In principle
    the compiler could have re-ordered operations such that an error could
    be thrown while "pos" had an incorrect value.
    
    It's unclear how real the risk is here, but for safety back-patch
    to all active branches.
    c58accd7
async.c 66.5 KB