pgsql: Fix longstanding race condition in plancache.c.
От | Tom Lane |
---|---|
Тема | pgsql: Fix longstanding race condition in plancache.c. |
Дата | |
Msg-id | E1UTeti-00005J-N1@gemulon.postgresql.org обсуждение исходный текст |
Список | 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 ------ master Details ------- http://git.postgresql.org/pg/commitdiff/ac63dca607e8e22247defbc8fe03b6baa3628c42 Modified Files -------------- src/backend/utils/cache/plancache.c | 58 ++++++++++++++++++++++++++-------- 1 files changed, 44 insertions(+), 14 deletions(-)
В списке pgsql-committers по дате отправления: