Thread

  1. [PATCH] Avoid pallocs in async.c's SignalBackends critical section

    Joel Jacobson <joel@compiler.org> — 2025-11-23T14:45:35Z

    Hi hackers,
    
    This patch addresses this comment in async.c's SignalBackends:
    
        * XXX in principle these pallocs could fail, which would be bad.
        * Maybe preallocate the arrays?  They're not that large, though.
    
    This is unsafe, since AtCommit_Notify effectively runs in a critical
    section, so an OOM there would PANIC ("AbortTransaction while in COMMIT
    state"), as we can no longer abort safely.
    
    This patch fixes this by adding two static arrays, notifySignalPids and
    notifySignalProcs, allocated lazily in TopMemoryContext by
    initSignalArrays. PreCommit_Notify now calls initSignalArrays while it's
    still safe to ERROR, ensuring the arrays exist before entering the
    commit path.
    
    SignalBackends is updated to use these preallocated arrays instead of
    allocating temporary ones.
    
    This removes the risk of palloc in a critical section and eliminates
    repeated palloc/pfree cycles.
    
    /Joel