• Tom Lane's avatar
    Install an error check into cancel_before_shmem_exit(). · c9ae5cbb
    Tom Lane authored
    Historically, cancel_before_shmem_exit() just silently did nothing
    if the specified callback wasn't the top-of-stack.  The folly of
    ignoring this case was exposed by the bugs fixed in 30364019 and
    bab15004, so let's make it throw elog(ERROR) instead.
    
    There is a decent argument to be made that PG_ENSURE_ERROR_CLEANUP
    should use some separate infrastructure, so it wouldn't break if
    something inside the guarded code decides to register a new
    before_shmem_exit callback.  However, a survey of the surviving
    uses of before_shmem_exit() and PG_ENSURE_ERROR_CLEANUP doesn't
    show any plausible conflicts of that sort today, so for now we'll
    forgo the extra complexity.  (It will almost certainly become
    necessary if anyone ever wants to wrap PG_ENSURE_ERROR_CLEANUP
    around arbitrary user-defined actions, though.)
    
    No backpatch, since this is developer support not a production issue.
    
    Bharath Rupireddy, per advice from Andres Freund, Robert Haas, and myself
    
    Discussion: https://postgr.es/m/CALj2ACWk7j4F2v2fxxYfrroOF=AdFNPr1WsV+AGtHAFQOqm_pw@mail.gmail.com
    c9ae5cbb
ipc.c 13.4 KB