diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2012-09-09 20:33:10 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2012-09-09 20:33:10 -0400 |
commit | dc447e1515941c8edc51fabcd318f7b1311dd1e8 (patch) | |
tree | ad2018cfd31e89e4f48f71c3ea8143db77227803 /src/backend/executor/execUtils.c | |
parent | 6e54298bb418dd9dfb983cfe9b06034754f83a8e (diff) |
Make plperl safe against functions that are redefined while running.
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.
Diffstat (limited to 'src/backend/executor/execUtils.c')
0 files changed, 0 insertions, 0 deletions