• Tom Lane's avatar
    Make plperl safe against functions that are redefined while running. · 59f23fe8
    Tom Lane authored
    validate_plperl_function() supposed that it could free an old
    plperl_proc_desc struct immediately upon detecting that it was stale.
    However, if a plperl function is called recursively, this could result
    in deleting the struct out from under an outer invocation, leading to
    misbehavior or crashes.  Add a simple reference-count mechanism to
    ensure that such structs are freed only when the last reference goes
    away.
    
    Per investigation of bug #7516 from Marko Tiikkaja.  I am not certain
    that this error explains his report, because he says he didn't have
    any recursive calls --- but it's hard to see how else it could have
    crashed right there.  In any case, this definitely fixes some problems
    in the area.
    
    Back-patch to all active branches.
    59f23fe8
plperl.out 19.8 KB