From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Make plperl safe against functions that are redefined while runn |
Date: | 2012-09-10 00:33:40 |
Message-ID: | E1TArwa-0008Sc-1I@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
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.
Branch
------
REL8_4_STABLE
Details
-------
http://git.postgresql.org/pg/commitdiff/dc447e1515941c8edc51fabcd318f7b1311dd1e8
Modified Files
--------------
src/pl/plperl/expected/plperl.out | 18 +++++++
src/pl/plperl/plperl.c | 95 +++++++++++++++++++++++++-----------
src/pl/plperl/sql/plperl.sql | 10 ++++
3 files changed, 94 insertions(+), 29 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Dunstan | 2012-09-10 16:51:49 | pgsql: Add vcregress.pl target for checking pg_upgrade. |
Previous Message | Tom Lane | 2012-09-10 00:33:39 | pgsql: Make plperl safe against functions that are redefined while runn |