• Tom Lane's avatar
    Fix ancient memory leak in contrib/auto_explain. · 5c0f7cc5
    Tom Lane authored
    The ExecutorEnd hook is invoked in a context that could be quite
    long-lived, not the executor's own per-query context as I think
    we were sort of assuming.  Thus, any cruft generated while producing
    the EXPLAIN output could accumulate over multiple queries.  This can
    result in spectacular leakage if log_nested_statements is on, and
    even without that I'm surprised nobody complained before.
    
    To fix, just switch into the executor's context so that anything we
    allocate will be released when standard_ExecutorEnd frees the executor
    state.  We might as well nuke the code's retail pfree of the explain
    output string, too; that's laughably inadequate to the need.
    
    Japin Li, per report from Jeff Janes.  This bug is old, so
    back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/CAMkU=1wCVtbeRn0s9gt12KwQ7PLXovbpM8eg25SYocKW3BT4hg@mail.gmail.com
    5c0f7cc5
auto_explain.c 11.2 KB