]> granicus.if.org Git - postgresql/commit
Fix fd.c to preserve errno where needed.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 May 2013 19:04:38 +0000 (15:04 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 May 2013 19:04:38 +0000 (15:04 -0400)
commite7e005ed90f7e417696a9388717f91b55fd195bb
tree5eb461627b0a885436ed2c6bed4e99a1e25f242a
parent630a8af5933f090cb24b0fb9da0296d0a32a5675
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.
src/backend/storage/file/fd.c