• Tom Lane's avatar
    Fix error cleanup failure caused by 8.4 changes in plpgsql to try to avoid · 011eae60
    Tom Lane authored
    memory leakage in error recovery.  We were calling FreeExprContext, and
    therefore invoking ExprContextCallback callbacks, in both normal and error
    exits from subtransactions.  However this isn't very safe, as shown in
    recent trouble report from Frank van Vugt, in which releasing a tupledesc
    refcount failed.  It's also unnecessary, since the resources that callbacks
    might wish to release should be cleaned up by other error recovery mechanisms
    (ie the resource owners).  We only really want FreeExprContext to release
    memory attached to the exprcontext in the error-exit case.  So, add a bool
    parameter to FreeExprContext to tell it not to call the callbacks.
    
    A more general solution would be to pass the isCommit bool parameter on to
    the callbacks, so they could do only safe things during error exit.  But
    that would make the patch significantly more invasive and possibly break
    third-party code that registers ExprContextCallback callbacks.  We might want
    to do that later in HEAD, but for now I'll just do what seems reasonable to
    back-patch.
    011eae60
executor.h 11.9 KB