From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Fix longstanding race condition in plancache.c. |
Date: | 2013-04-20 21:00:38 |
Message-ID: | E1UTeti-00005L-Of@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix longstanding race condition in plancache.c.
When creating or manipulating a cached plan for a transaction control
command (particularly ROLLBACK), we must not perform any catalog accesses,
since we might be in an aborted transaction. However, plancache.c busily
saved or examined the search_path for every cached plan. If we were
unlucky enough to do this at a moment where the path's expansion into
schema OIDs wasn't already cached, we'd do some catalog accesses; and with
some more bad luck such as an ill-timed signal arrival, that could lead to
crashes or Assert failures, as exhibited in bug #8095 from Nachiket Vaidya.
Fortunately, there's no real need to consider the search path for such
commands, so we can just skip the relevant steps when the subject statement
is a TransactionStmt. This is somewhat related to bug #5269, though the
failure happens during initial cached-plan creation rather than
revalidation.
This bug has been there since the plan cache was invented, so back-patch
to all supported branches.
Branch
------
REL9_2_STABLE
Details
-------
http://git.postgresql.org/pg/commitdiff/c37ec840cfe80e8fde05bc87417ced2765ab17dd
Modified Files
--------------
src/backend/utils/cache/plancache.c | 51 ++++++++++++++++++++++++++++------
1 files changed, 42 insertions(+), 9 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2013-04-20 21:09:27 | Re: pgsql: Push 9.3 release SGML file |
Previous Message | Bruce Momjian | 2013-04-20 20:51:01 | pgsql: Reorder some 9.3 release item entries |