• Andres Freund's avatar
    Fix the fallback memory barrier implementation to be reentrant. · 1b468a13
    Andres Freund authored
    This was essentially "broken" since 0c8eda62; but until more
    recently (14e8803f) barriers usage in signal handlers was infrequent.
    
    The failure to be reentrant was noticed because the test_shm_mq, which
    uses memory barriers at a high frequency, occasionally got stuck on some
    solaris buildfarm animals. Turns out, those machines use sun studio
    12.1, which doesn't yet have efficient memory barrier support. A machine
    with a newer sun studio did not fail.  Forcing the barrier fallback to
    be used on x86 allows to reproduce the problem.
    
    The new fallback is to use kill(PostmasterPid, 0) based on the theory
    that that'll always imply a barrier due to checking the liveliness of
    PostmasterPid on systems old enough to need fallback support. It's hard
    to come up with a good and performant fallback.
    
    I'm not backpatching this for now - the problem isn't active in the back
    branches, and we haven't backpatched barrier changes for
    now. Additionally master looks entirely different than the back branches
    due to the new atomics abstraction. It seems better to let this rest in
    master, where the non-reentrancy actively causes a problem, and then
    consider backpatching.
    
    Found-By: Robert Haas
    Discussion: 55626265.3060800@dunslane.net
    1b468a13
atomics.c 3.67 KB