aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2016-08-19 14:38:55 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2016-08-19 14:38:55 -0300
commit6f79ae7fe549bed8bbd1f54ddd9b98f8f9a315f5 (patch)
treee469ebac126fa446cf570f7bfd573871566c2e09 /src
parenta859e640035680db31531ccd19a67292dd726baf (diff)
downloadpostgresql-6f79ae7fe549bed8bbd1f54ddd9b98f8f9a315f5.tar.gz
postgresql-6f79ae7fe549bed8bbd1f54ddd9b98f8f9a315f5.zip
reorderbuffer: preserve errno while reporting error
Clobbering errno during cleanup after an error is an oft-repeated, easy to make mistake. Deal with it here as everywhere else, by saving it aside and restoring after cleanup, before ereport'ing. In passing, add a missing errcode declaration in another ereport() call in the same file, which I noticed while skimming the file looking for similar problems. Backpatch to 9.4, where this code was introduced.
Diffstat (limited to 'src')
-rw-r--r--src/backend/replication/logical/reorderbuffer.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c
index 9594b1c671b..213ce34674c 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -2317,7 +2317,10 @@ ReorderBufferSerializeChange(ReorderBuffer *rb, ReorderBufferTXN *txn,
if (write(fd, rb->outbuf, ondisk->size) != ondisk->size)
{
+ int save_errno = errno;
+
CloseTransientFile(fd);
+ errno = save_errno;
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not write to data file for XID %u: %m",
@@ -3070,7 +3073,8 @@ ApplyLogicalMappingFile(HTAB *tuplecid_data, Oid relid, const char *fname)
fd = OpenTransientFile(path, O_RDONLY | PG_BINARY, 0);
if (fd < 0)
ereport(ERROR,
- (errmsg("could not open file \"%s\": %m", path)));
+ (errcode_for_file_access(),
+ errmsg("could not open file \"%s\": %m", path)));
while (true)
{