pgsql: Fix fd.c to preserve errno where needed.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix fd.c to preserve errno where needed.
Date: 2013-05-16 19:05:32
Message-ID: E1Ud3Ua-000242-0a@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix fd.c to preserve errno where needed.

PathNameOpenFile failed to ensure that the correct value of errno was
returned to its caller after a failure (because it incorrectly supposed
that free() can never change errno). In some cases this would result
in a user-visible failure because an expected ENOENT errno was replaced
with something else. Bogus EINVAL failures have been observed on OS X,
for example.

There were also a couple of places that could mangle an important value
of errno if FDDEBUG was defined. While the usefulness of that debug
support is highly debatable, we might as well make it safe to use,
so add errno save/restore logic to the DO_DB macro.

Per bug #8167 from Nelson Minar, diagnosed by RhodiumToad.
Back-patch to all supported branches.

Branch
------
REL9_1_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/9d8bc2f0aeaa7f7fceb393fe5740cb709c0f27e7

Modified Files
--------------
src/backend/storage/file/fd.c | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2013-05-16 20:47:38 pgsql: Fix crash when trying to display a NOTIFY rule action.
Previous Message Tom Lane 2013-05-16 19:05:31 pgsql: Fix fd.c to preserve errno where needed.