pgsql: Fix an old corner-case bug in set_config_option: push_old_value

From: tgl(at)postgresql(dot)org (Tom Lane)
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix an old corner-case bug in set_config_option: push_old_value
Date: 2008-05-26 18:54:59
Message-ID: 20080526185459.99F12754C54@cvs.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Log Message:
-----------
Fix an old corner-case bug in set_config_option: push_old_value has to be
called before, not after, calling the assign_hook if any. This is because
push_old_value might fail (due to palloc out-of-memory), and in that case
there would be no stack entry to tell transaction abort to undo the GUC
assignment. Of course the actual assignment to the GUC variable hasn't
happened yet --- but the assign_hook might have altered subsidiary state.
Without a stack entry we won't call it again to make it undo such actions.
So this is necessary to make the world safe for assign_hooks with side
effects. Per a discussion a couple weeks ago with Magnus.

Back-patch to 8.0. 7.x did not have the problem because it did not have
allocatable stacks of GUC values.

Tags:
----
REL8_0_STABLE

Modified Files:
--------------
pgsql/src/backend/utils/misc:
guc.c (r1.252.4.4 -> r1.252.4.5)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/misc/guc.c?r1=1.252.4.4&r2=1.252.4.5)

Browse pgsql-committers by date

  From Date Subject
Next Message User Jdavis 2008-05-26 19:12:48 temporal - temporal: added notice that the repository has moved to
Previous Message Tom Lane 2008-05-26 18:54:50 pgsql: Fix an old corner-case bug in set_config_option: push_old_value